mailslurp-client-csharp

https://github.com/mailslurp/mailslurp-client-csharp

Table of Contents

src/mailslurp/Model/WebhookTestResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Results of testing a webhook
    /// </summary>
    [DataContract(Name = "WebhookTestResult")]
    public partial class WebhookTestResult : IEquatable<WebhookTestResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookTestResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookTestResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookTestResult" /> class.
        /// </summary>
        /// <param name="message">message.</param>
        /// <param name="response">response (required).</param>
        /// <param name="request">request (required).</param>
        public WebhookTestResult(string message = default(string), WebhookTestResponse response = default(WebhookTestResponse), WebhookTestRequest request = default(WebhookTestRequest))
        {
            // to ensure "response" is required (not null)
            if (response == null)
            {
                throw new ArgumentNullException("response is a required property for WebhookTestResult and cannot be null");
            }
            this.Response = response;
            // to ensure "request" is required (not null)
            if (request == null)
            {
                throw new ArgumentNullException("request is a required property for WebhookTestResult and cannot be null");
            }
            this.Request = request;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Response
        /// </summary>
        [DataMember(Name = "response", IsRequired = true, EmitDefaultValue = true)]
        public WebhookTestResponse Response { get; set; }

        /// <summary>
        /// Gets or Sets Request
        /// </summary>
        [DataMember(Name = "request", IsRequired = true, EmitDefaultValue = true)]
        public WebhookTestRequest Request { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookTestResult {\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Response: ").Append(Response).Append("\n");
            sb.Append("  Request: ").Append(Request).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookTestResult);
        }

        /// <summary>
        /// Returns true if WebhookTestResult instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookTestResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookTestResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Response == input.Response ||
                    (this.Response != null &&
                    this.Response.Equals(input.Response))
                ) && 
                (
                    this.Request == input.Request ||
                    (this.Request != null &&
                    this.Request.Equals(input.Request))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.Response != null)
                {
                    hashCode = (hashCode * 59) + this.Response.GetHashCode();
                }
                if (this.Request != null)
                {
                    hashCode = (hashCode * 59) + this.Request.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookTestResponse.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Response from webhook test request
    /// </summary>
    [DataContract(Name = "WebhookTestResponse")]
    public partial class WebhookTestResponse : IEquatable<WebhookTestResponse>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookTestResponse" /> class.
        /// </summary>
        /// <param name="statusCode">statusCode.</param>
        /// <param name="message">message.</param>
        public WebhookTestResponse(int? statusCode = default(int?), string message = default(string))
        {
            this.StatusCode = statusCode;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets StatusCode
        /// </summary>
        [DataMember(Name = "statusCode", EmitDefaultValue = true)]
        public int? StatusCode { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookTestResponse {\n");
            sb.Append("  StatusCode: ").Append(StatusCode).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookTestResponse);
        }

        /// <summary>
        /// Returns true if WebhookTestResponse instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookTestResponse to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookTestResponse input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.StatusCode == input.StatusCode ||
                    (this.StatusCode != null &&
                    this.StatusCode.Equals(input.StatusCode))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.StatusCode != null)
                {
                    hashCode = (hashCode * 59) + this.StatusCode.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookTestRequest.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of webhook test request
    /// </summary>
    [DataContract(Name = "WebhookTestRequest")]
    public partial class WebhookTestRequest : IEquatable<WebhookTestRequest>, IValidatableObject
    {
        /// <summary>
        /// Defines Method
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum MethodEnum
        {
            /// <summary>
            /// Enum POST for value: POST
            /// </summary>
            [EnumMember(Value = "POST")]
            POST = 1,

            /// <summary>
            /// Enum DELETE for value: DELETE
            /// </summary>
            [EnumMember(Value = "DELETE")]
            DELETE = 2,

            /// <summary>
            /// Enum GET for value: GET
            /// </summary>
            [EnumMember(Value = "GET")]
            GET = 3,

            /// <summary>
            /// Enum PUT for value: PUT
            /// </summary>
            [EnumMember(Value = "PUT")]
            PUT = 4,

            /// <summary>
            /// Enum PATCH for value: PATCH
            /// </summary>
            [EnumMember(Value = "PATCH")]
            PATCH = 5,

            /// <summary>
            /// Enum HEAD for value: HEAD
            /// </summary>
            [EnumMember(Value = "HEAD")]
            HEAD = 6,

            /// <summary>
            /// Enum OPTIONS for value: OPTIONS
            /// </summary>
            [EnumMember(Value = "OPTIONS")]
            OPTIONS = 7,

            /// <summary>
            /// Enum TRACE for value: TRACE
            /// </summary>
            [EnumMember(Value = "TRACE")]
            TRACE = 8

        }


        /// <summary>
        /// Gets or Sets Method
        /// </summary>
        [DataMember(Name = "method", IsRequired = true, EmitDefaultValue = true)]
        public MethodEnum Method { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookTestRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookTestRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookTestRequest" /> class.
        /// </summary>
        /// <param name="url">url (required).</param>
        /// <param name="method">method (required).</param>
        /// <param name="headers">headers (required).</param>
        /// <param name="payload">payload.</param>
        public WebhookTestRequest(string url = default(string), MethodEnum method = default(MethodEnum), Dictionary<string, string> headers = default(Dictionary<string, string>), string payload = default(string))
        {
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for WebhookTestRequest and cannot be null");
            }
            this.Url = url;
            this.Method = method;
            // to ensure "headers" is required (not null)
            if (headers == null)
            {
                throw new ArgumentNullException("headers is a required property for WebhookTestRequest and cannot be null");
            }
            this.Headers = headers;
            this.Payload = payload;
        }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets Headers
        /// </summary>
        [DataMember(Name = "headers", IsRequired = true, EmitDefaultValue = true)]
        public Dictionary<string, string> Headers { get; set; }

        /// <summary>
        /// Gets or Sets Payload
        /// </summary>
        [DataMember(Name = "payload", EmitDefaultValue = true)]
        public string Payload { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookTestRequest {\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  Method: ").Append(Method).Append("\n");
            sb.Append("  Headers: ").Append(Headers).Append("\n");
            sb.Append("  Payload: ").Append(Payload).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookTestRequest);
        }

        /// <summary>
        /// Returns true if WebhookTestRequest instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookTestRequest to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookTestRequest input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.Method == input.Method ||
                    this.Method.Equals(input.Method)
                ) && 
                (
                    this.Headers == input.Headers ||
                    this.Headers != null &&
                    input.Headers != null &&
                    this.Headers.SequenceEqual(input.Headers)
                ) && 
                (
                    this.Payload == input.Payload ||
                    (this.Payload != null &&
                    this.Payload.Equals(input.Payload))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Method.GetHashCode();
                if (this.Headers != null)
                {
                    hashCode = (hashCode * 59) + this.Headers.GetHashCode();
                }
                if (this.Payload != null)
                {
                    hashCode = (hashCode * 59) + this.Payload.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookResultDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of a webhook notification
    /// </summary>
    [DataContract(Name = "WebhookResultDto")]
    public partial class WebhookResultDto : IEquatable<WebhookResultDto>, IValidatableObject
    {
        /// <summary>
        /// Defines HttpMethod
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum HttpMethodEnum
        {
            /// <summary>
            /// Enum POST for value: POST
            /// </summary>
            [EnumMember(Value = "POST")]
            POST = 1,

            /// <summary>
            /// Enum DELETE for value: DELETE
            /// </summary>
            [EnumMember(Value = "DELETE")]
            DELETE = 2,

            /// <summary>
            /// Enum GET for value: GET
            /// </summary>
            [EnumMember(Value = "GET")]
            GET = 3,

            /// <summary>
            /// Enum PUT for value: PUT
            /// </summary>
            [EnumMember(Value = "PUT")]
            PUT = 4,

            /// <summary>
            /// Enum PATCH for value: PATCH
            /// </summary>
            [EnumMember(Value = "PATCH")]
            PATCH = 5,

            /// <summary>
            /// Enum HEAD for value: HEAD
            /// </summary>
            [EnumMember(Value = "HEAD")]
            HEAD = 6,

            /// <summary>
            /// Enum OPTIONS for value: OPTIONS
            /// </summary>
            [EnumMember(Value = "OPTIONS")]
            OPTIONS = 7,

            /// <summary>
            /// Enum TRACE for value: TRACE
            /// </summary>
            [EnumMember(Value = "TRACE")]
            TRACE = 8

        }


        /// <summary>
        /// Gets or Sets HttpMethod
        /// </summary>
        [DataMember(Name = "httpMethod", IsRequired = true, EmitDefaultValue = true)]
        public HttpMethodEnum HttpMethod { get; set; }
        /// <summary>
        /// Defines WebhookEvent
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum WebhookEventEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Gets or Sets WebhookEvent
        /// </summary>
        [DataMember(Name = "webhookEvent", IsRequired = true, EmitDefaultValue = true)]
        public WebhookEventEnum WebhookEvent { get; set; }
        /// <summary>
        /// Defines ResultType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ResultTypeEnum
        {
            /// <summary>
            /// Enum BADRESPONSE for value: BAD_RESPONSE
            /// </summary>
            [EnumMember(Value = "BAD_RESPONSE")]
            BADRESPONSE = 1,

            /// <summary>
            /// Enum EXCEPTION for value: EXCEPTION
            /// </summary>
            [EnumMember(Value = "EXCEPTION")]
            EXCEPTION = 2,

            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 3,

            /// <summary>
            /// Enum REDRIVEN for value: REDRIVEN
            /// </summary>
            [EnumMember(Value = "REDRIVEN")]
            REDRIVEN = 4

        }


        /// <summary>
        /// Gets or Sets ResultType
        /// </summary>
        [DataMember(Name = "resultType", EmitDefaultValue = true)]
        public ResultTypeEnum? ResultType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookResultDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookResultDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookResultDto" /> class.
        /// </summary>
        /// <param name="id">id.</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="webhookId">webhookId (required).</param>
        /// <param name="webhookUrl">webhookUrl (required).</param>
        /// <param name="messageId">messageId (required).</param>
        /// <param name="redriveId">redriveId.</param>
        /// <param name="httpMethod">httpMethod (required).</param>
        /// <param name="webhookEvent">webhookEvent (required).</param>
        /// <param name="responseStatus">responseStatus.</param>
        /// <param name="responseTimeMillis">responseTimeMillis (required).</param>
        /// <param name="responseBodyExtract">responseBodyExtract.</param>
        /// <param name="resultType">resultType.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="seen">seen (required).</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="emailId">emailId.</param>
        /// <param name="attachmentId">attachmentId.</param>
        /// <param name="phoneId">phoneId.</param>
        /// <param name="smsId">smsId.</param>
        public WebhookResultDto(Guid? id = default(Guid?), Guid userId = default(Guid), Guid webhookId = default(Guid), string webhookUrl = default(string), string messageId = default(string), Guid? redriveId = default(Guid?), HttpMethodEnum httpMethod = default(HttpMethodEnum), WebhookEventEnum webhookEvent = default(WebhookEventEnum), int? responseStatus = default(int?), long responseTimeMillis = default(long), string responseBodyExtract = default(string), ResultTypeEnum? resultType = default(ResultTypeEnum?), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), bool seen = default(bool), Guid? inboxId = default(Guid?), Guid? emailId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? phoneId = default(Guid?), Guid? smsId = default(Guid?))
        {
            this.UserId = userId;
            this.WebhookId = webhookId;
            // to ensure "webhookUrl" is required (not null)
            if (webhookUrl == null)
            {
                throw new ArgumentNullException("webhookUrl is a required property for WebhookResultDto and cannot be null");
            }
            this.WebhookUrl = webhookUrl;
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookResultDto and cannot be null");
            }
            this.MessageId = messageId;
            this.HttpMethod = httpMethod;
            this.WebhookEvent = webhookEvent;
            this.ResponseTimeMillis = responseTimeMillis;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Seen = seen;
            this.Id = id;
            this.RedriveId = redriveId;
            this.ResponseStatus = responseStatus;
            this.ResponseBodyExtract = responseBodyExtract;
            this.ResultType = resultType;
            this.InboxId = inboxId;
            this.EmailId = emailId;
            this.AttachmentId = attachmentId;
            this.PhoneId = phoneId;
            this.SmsId = smsId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = true)]
        public Guid? Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets WebhookId
        /// </summary>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Gets or Sets WebhookUrl
        /// </summary>
        [DataMember(Name = "webhookUrl", IsRequired = true, EmitDefaultValue = true)]
        public string WebhookUrl { get; set; }

        /// <summary>
        /// Gets or Sets MessageId
        /// </summary>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// Gets or Sets RedriveId
        /// </summary>
        [DataMember(Name = "redriveId", EmitDefaultValue = true)]
        public Guid? RedriveId { get; set; }

        /// <summary>
        /// Gets or Sets ResponseStatus
        /// </summary>
        [DataMember(Name = "responseStatus", EmitDefaultValue = true)]
        public int? ResponseStatus { get; set; }

        /// <summary>
        /// Gets or Sets ResponseTimeMillis
        /// </summary>
        [DataMember(Name = "responseTimeMillis", IsRequired = true, EmitDefaultValue = true)]
        public long ResponseTimeMillis { get; set; }

        /// <summary>
        /// Gets or Sets ResponseBodyExtract
        /// </summary>
        [DataMember(Name = "responseBodyExtract", EmitDefaultValue = true)]
        public string ResponseBodyExtract { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Seen
        /// </summary>
        [DataMember(Name = "seen", IsRequired = true, EmitDefaultValue = true)]
        public bool Seen { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets EmailId
        /// </summary>
        [DataMember(Name = "emailId", EmitDefaultValue = true)]
        public Guid? EmailId { get; set; }

        /// <summary>
        /// Gets or Sets AttachmentId
        /// </summary>
        [DataMember(Name = "attachmentId", EmitDefaultValue = true)]
        public Guid? AttachmentId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneId
        /// </summary>
        [DataMember(Name = "phoneId", EmitDefaultValue = true)]
        public Guid? PhoneId { get; set; }

        /// <summary>
        /// Gets or Sets SmsId
        /// </summary>
        [DataMember(Name = "smsId", EmitDefaultValue = true)]
        public Guid? SmsId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookResultDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  WebhookUrl: ").Append(WebhookUrl).Append("\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  RedriveId: ").Append(RedriveId).Append("\n");
            sb.Append("  HttpMethod: ").Append(HttpMethod).Append("\n");
            sb.Append("  WebhookEvent: ").Append(WebhookEvent).Append("\n");
            sb.Append("  ResponseStatus: ").Append(ResponseStatus).Append("\n");
            sb.Append("  ResponseTimeMillis: ").Append(ResponseTimeMillis).Append("\n");
            sb.Append("  ResponseBodyExtract: ").Append(ResponseBodyExtract).Append("\n");
            sb.Append("  ResultType: ").Append(ResultType).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  Seen: ").Append(Seen).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  AttachmentId: ").Append(AttachmentId).Append("\n");
            sb.Append("  PhoneId: ").Append(PhoneId).Append("\n");
            sb.Append("  SmsId: ").Append(SmsId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookResultDto);
        }

        /// <summary>
        /// Returns true if WebhookResultDto instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookResultDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookResultDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.WebhookUrl == input.WebhookUrl ||
                    (this.WebhookUrl != null &&
                    this.WebhookUrl.Equals(input.WebhookUrl))
                ) && 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.RedriveId == input.RedriveId ||
                    (this.RedriveId != null &&
                    this.RedriveId.Equals(input.RedriveId))
                ) && 
                (
                    this.HttpMethod == input.HttpMethod ||
                    this.HttpMethod.Equals(input.HttpMethod)
                ) && 
                (
                    this.WebhookEvent == input.WebhookEvent ||
                    this.WebhookEvent.Equals(input.WebhookEvent)
                ) && 
                (
                    this.ResponseStatus == input.ResponseStatus ||
                    (this.ResponseStatus != null &&
                    this.ResponseStatus.Equals(input.ResponseStatus))
                ) && 
                (
                    this.ResponseTimeMillis == input.ResponseTimeMillis ||
                    this.ResponseTimeMillis.Equals(input.ResponseTimeMillis)
                ) && 
                (
                    this.ResponseBodyExtract == input.ResponseBodyExtract ||
                    (this.ResponseBodyExtract != null &&
                    this.ResponseBodyExtract.Equals(input.ResponseBodyExtract))
                ) && 
                (
                    this.ResultType == input.ResultType ||
                    this.ResultType.Equals(input.ResultType)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.Seen == input.Seen ||
                    this.Seen.Equals(input.Seen)
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.AttachmentId == input.AttachmentId ||
                    (this.AttachmentId != null &&
                    this.AttachmentId.Equals(input.AttachmentId))
                ) && 
                (
                    this.PhoneId == input.PhoneId ||
                    (this.PhoneId != null &&
                    this.PhoneId.Equals(input.PhoneId))
                ) && 
                (
                    this.SmsId == input.SmsId ||
                    (this.SmsId != null &&
                    this.SmsId.Equals(input.SmsId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                if (this.WebhookUrl != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookUrl.GetHashCode();
                }
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.RedriveId != null)
                {
                    hashCode = (hashCode * 59) + this.RedriveId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.HttpMethod.GetHashCode();
                hashCode = (hashCode * 59) + this.WebhookEvent.GetHashCode();
                if (this.ResponseStatus != null)
                {
                    hashCode = (hashCode * 59) + this.ResponseStatus.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ResponseTimeMillis.GetHashCode();
                if (this.ResponseBodyExtract != null)
                {
                    hashCode = (hashCode * 59) + this.ResponseBodyExtract.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ResultType.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Seen.GetHashCode();
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.AttachmentId != null)
                {
                    hashCode = (hashCode * 59) + this.AttachmentId.GetHashCode();
                }
                if (this.PhoneId != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneId.GetHashCode();
                }
                if (this.SmsId != null)
                {
                    hashCode = (hashCode * 59) + this.SmsId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookRedriveResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of retrying webhook
    /// </summary>
    [DataContract(Name = "WebhookRedriveResult")]
    public partial class WebhookRedriveResult : IEquatable<WebhookRedriveResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookRedriveResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookRedriveResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookRedriveResult" /> class.
        /// </summary>
        /// <param name="webhookResultId">webhookResultId (required).</param>
        /// <param name="success">success (required).</param>
        /// <param name="message">message.</param>
        public WebhookRedriveResult(Guid webhookResultId = default(Guid), bool success = default(bool), string message = default(string))
        {
            this.WebhookResultId = webhookResultId;
            this.Success = success;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets WebhookResultId
        /// </summary>
        [DataMember(Name = "webhookResultId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookResultId { get; set; }

        /// <summary>
        /// Gets or Sets Success
        /// </summary>
        [DataMember(Name = "success", IsRequired = true, EmitDefaultValue = true)]
        public bool Success { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookRedriveResult {\n");
            sb.Append("  WebhookResultId: ").Append(WebhookResultId).Append("\n");
            sb.Append("  Success: ").Append(Success).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookRedriveResult);
        }

        /// <summary>
        /// Returns true if WebhookRedriveResult instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookRedriveResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookRedriveResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.WebhookResultId == input.WebhookResultId ||
                    (this.WebhookResultId != null &&
                    this.WebhookResultId.Equals(input.WebhookResultId))
                ) && 
                (
                    this.Success == input.Success ||
                    this.Success.Equals(input.Success)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.WebhookResultId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookResultId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Success.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookRedriveAllResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of retrying all failed webhook
    /// </summary>
    [DataContract(Name = "WebhookRedriveAllResult")]
    public partial class WebhookRedriveAllResult : IEquatable<WebhookRedriveAllResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookRedriveAllResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookRedriveAllResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookRedriveAllResult" /> class.
        /// </summary>
        /// <param name="success">success (required).</param>
        /// <param name="message">message.</param>
        public WebhookRedriveAllResult(bool success = default(bool), string message = default(string))
        {
            this.Success = success;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Success
        /// </summary>
        [DataMember(Name = "success", IsRequired = true, EmitDefaultValue = true)]
        public bool Success { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookRedriveAllResult {\n");
            sb.Append("  Success: ").Append(Success).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookRedriveAllResult);
        }

        /// <summary>
        /// Returns true if WebhookRedriveAllResult instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookRedriveAllResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookRedriveAllResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Success == input.Success ||
                    this.Success.Equals(input.Success)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Success.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Representation of a webhook
    /// </summary>
    [DataContract(Name = "WebhookProjection")]
    public partial class WebhookProjection : IEquatable<WebhookProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines EventName
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Gets or Sets EventName
        /// </summary>
        [DataMember(Name = "eventName", EmitDefaultValue = false)]
        public EventNameEnum? EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="url">url (required).</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="eventName">eventName.</param>
        /// <param name="phoneNumberId">phoneNumberId.</param>
        /// <param name="name">name.</param>
        /// <param name="id">id (required).</param>
        public WebhookProjection(DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), string url = default(string), Guid inboxId = default(Guid), EventNameEnum? eventName = default(EventNameEnum?), Guid phoneNumberId = default(Guid), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for WebhookProjection and cannot be null");
            }
            this.Url = url;
            this.Id = id;
            this.InboxId = inboxId;
            this.EventName = eventName;
            this.PhoneNumberId = phoneNumberId;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = false)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumberId
        /// </summary>
        [DataMember(Name = "phoneNumberId", EmitDefaultValue = false)]
        public Guid PhoneNumberId { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  PhoneNumberId: ").Append(PhoneNumberId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookProjection);
        }

        /// <summary>
        /// Returns true if WebhookProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.PhoneNumberId == input.PhoneNumberId ||
                    (this.PhoneNumberId != null &&
                    this.PhoneNumberId.Equals(input.PhoneNumberId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.PhoneNumberId != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumberId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookNewSmsPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// NEW_SMS webhook payload. Sent to your webhook url endpoint via HTTP POST when an sms is received by the phone number that your webhook is attached to. Use the SMS ID to fetch the full SMS details.
    /// </summary>
    [DataContract(Name = "WebhookNewSmsPayload")]
    public partial class WebhookNewSmsPayload : IEquatable<WebhookNewSmsPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewSmsPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookNewSmsPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewSmsPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="smsId">ID of SMS message (required).</param>
        /// <param name="userId">User ID of event (required).</param>
        /// <param name="phoneNumber">ID of phone number receiving SMS (required).</param>
        /// <param name="toNumber">Recipient phone number (required).</param>
        /// <param name="fromNumber">Sender phone number (required).</param>
        /// <param name="body">SMS message body (required).</param>
        /// <param name="read">SMS has been read (required).</param>
        public WebhookNewSmsPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid smsId = default(Guid), Guid userId = default(Guid), Guid phoneNumber = default(Guid), string toNumber = default(string), string fromNumber = default(string), string body = default(string), bool read = default(bool))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookNewSmsPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.SmsId = smsId;
            this.UserId = userId;
            this.PhoneNumber = phoneNumber;
            // to ensure "toNumber" is required (not null)
            if (toNumber == null)
            {
                throw new ArgumentNullException("toNumber is a required property for WebhookNewSmsPayload and cannot be null");
            }
            this.ToNumber = toNumber;
            // to ensure "fromNumber" is required (not null)
            if (fromNumber == null)
            {
                throw new ArgumentNullException("fromNumber is a required property for WebhookNewSmsPayload and cannot be null");
            }
            this.FromNumber = fromNumber;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for WebhookNewSmsPayload and cannot be null");
            }
            this.Body = body;
            this.Read = read;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// ID of SMS message
        /// </summary>
        /// <value>ID of SMS message</value>
        [DataMember(Name = "smsId", IsRequired = true, EmitDefaultValue = true)]
        public Guid SmsId { get; set; }

        /// <summary>
        /// User ID of event
        /// </summary>
        /// <value>User ID of event</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// ID of phone number receiving SMS
        /// </summary>
        /// <value>ID of phone number receiving SMS</value>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumber { get; set; }

        /// <summary>
        /// Recipient phone number
        /// </summary>
        /// <value>Recipient phone number</value>
        [DataMember(Name = "toNumber", IsRequired = true, EmitDefaultValue = true)]
        public string ToNumber { get; set; }

        /// <summary>
        /// Sender phone number
        /// </summary>
        /// <value>Sender phone number</value>
        [DataMember(Name = "fromNumber", IsRequired = true, EmitDefaultValue = true)]
        public string FromNumber { get; set; }

        /// <summary>
        /// SMS message body
        /// </summary>
        /// <value>SMS message body</value>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// SMS has been read
        /// </summary>
        /// <value>SMS has been read</value>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookNewSmsPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  SmsId: ").Append(SmsId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  ToNumber: ").Append(ToNumber).Append("\n");
            sb.Append("  FromNumber: ").Append(FromNumber).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookNewSmsPayload);
        }

        /// <summary>
        /// Returns true if WebhookNewSmsPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookNewSmsPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookNewSmsPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.SmsId == input.SmsId ||
                    (this.SmsId != null &&
                    this.SmsId.Equals(input.SmsId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.ToNumber == input.ToNumber ||
                    (this.ToNumber != null &&
                    this.ToNumber.Equals(input.ToNumber))
                ) && 
                (
                    this.FromNumber == input.FromNumber ||
                    (this.FromNumber != null &&
                    this.FromNumber.Equals(input.FromNumber))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.SmsId != null)
                {
                    hashCode = (hashCode * 59) + this.SmsId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                if (this.ToNumber != null)
                {
                    hashCode = (hashCode * 59) + this.ToNumber.GetHashCode();
                }
                if (this.FromNumber != null)
                {
                    hashCode = (hashCode * 59) + this.FromNumber.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookNewEmailPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// NEW_EMAIL webhook payload. Sent to your webhook url endpoint via HTTP POST when an email is received by the inbox that your webhook is attached to. Use the email ID to fetch the full email body or attachments.
    /// </summary>
    [DataContract(Name = "WebhookNewEmailPayload")]
    public partial class WebhookNewEmailPayload : IEquatable<WebhookNewEmailPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewEmailPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookNewEmailPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewEmailPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="inboxId">Id of the inbox (required).</param>
        /// <param name="domainId">Id of the domain that received an email.</param>
        /// <param name="emailId">ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;. (required).</param>
        /// <param name="createdAt">Date time of event creation (required).</param>
        /// <param name="to">List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names. (required).</param>
        /// <param name="from">Who the email was sent from. An email address - see fromName for the sender name. (required).</param>
        /// <param name="cc">List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names. (required).</param>
        /// <param name="bcc">List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names. (required).</param>
        /// <param name="subject">The subject line of the email message as specified by SMTP subject header.</param>
        /// <param name="attachmentMetaDatas">List of attachment meta data objects if attachments present (required).</param>
        public WebhookNewEmailPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid inboxId = default(Guid), Guid? domainId = default(Guid?), Guid emailId = default(Guid), DateTime createdAt = default(DateTime), List<string> to = default(List<string>), string from = default(string), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), string subject = default(string), List<AttachmentMetaData> attachmentMetaDatas = default(List<AttachmentMetaData>))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.InboxId = inboxId;
            this.EmailId = emailId;
            this.CreatedAt = createdAt;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.To = to;
            // to ensure "from" is required (not null)
            if (from == null)
            {
                throw new ArgumentNullException("from is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.From = from;
            // to ensure "cc" is required (not null)
            if (cc == null)
            {
                throw new ArgumentNullException("cc is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.Cc = cc;
            // to ensure "bcc" is required (not null)
            if (bcc == null)
            {
                throw new ArgumentNullException("bcc is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.Bcc = bcc;
            // to ensure "attachmentMetaDatas" is required (not null)
            if (attachmentMetaDatas == null)
            {
                throw new ArgumentNullException("attachmentMetaDatas is a required property for WebhookNewEmailPayload and cannot be null");
            }
            this.AttachmentMetaDatas = attachmentMetaDatas;
            this.WebhookName = webhookName;
            this.DomainId = domainId;
            this.Subject = subject;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// Id of the inbox
        /// </summary>
        /// <value>Id of the inbox</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Id of the domain that received an email
        /// </summary>
        /// <value>Id of the domain that received an email</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;.
        /// </summary>
        /// <value>ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;.</value>
        [DataMember(Name = "emailId", IsRequired = true, EmitDefaultValue = true)]
        public Guid EmailId { get; set; }

        /// <summary>
        /// Date time of event creation
        /// </summary>
        /// <value>Date time of event creation</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Who the email was sent from. An email address - see fromName for the sender name.
        /// </summary>
        /// <value>Who the email was sent from. An email address - see fromName for the sender name.</value>
        [DataMember(Name = "from", IsRequired = true, EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "cc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "bcc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// The subject line of the email message as specified by SMTP subject header
        /// </summary>
        /// <value>The subject line of the email message as specified by SMTP subject header</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// List of attachment meta data objects if attachments present
        /// </summary>
        /// <value>List of attachment meta data objects if attachments present</value>
        [DataMember(Name = "attachmentMetaDatas", IsRequired = true, EmitDefaultValue = true)]
        public List<AttachmentMetaData> AttachmentMetaDatas { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookNewEmailPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  AttachmentMetaDatas: ").Append(AttachmentMetaDatas).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookNewEmailPayload);
        }

        /// <summary>
        /// Returns true if WebhookNewEmailPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookNewEmailPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookNewEmailPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.AttachmentMetaDatas == input.AttachmentMetaDatas ||
                    this.AttachmentMetaDatas != null &&
                    input.AttachmentMetaDatas != null &&
                    this.AttachmentMetaDatas.SequenceEqual(input.AttachmentMetaDatas)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.AttachmentMetaDatas != null)
                {
                    hashCode = (hashCode * 59) + this.AttachmentMetaDatas.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookNewContactPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// NEW_CONTACT webhook payload. Sent to your webhook url endpoint via HTTP POST when an email is received by the inbox that your webhook is attached to that contains a recipient that has not been saved as a contact.
    /// </summary>
    [DataContract(Name = "WebhookNewContactPayload")]
    public partial class WebhookNewContactPayload : IEquatable<WebhookNewContactPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewContactPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookNewContactPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewContactPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="contactId">Contact ID (required).</param>
        /// <param name="groupId">Contact group ID.</param>
        /// <param name="firstName">Contact first name.</param>
        /// <param name="lastName">Contact last name.</param>
        /// <param name="company">Contact company name.</param>
        /// <param name="primaryEmailAddress">Primary email address for contact.</param>
        /// <param name="emailAddresses">Email addresses for contact (required).</param>
        /// <param name="tags">Tags for contact (required).</param>
        /// <param name="metaData">metaData.</param>
        /// <param name="optOut">Has contact opted out of emails (required).</param>
        /// <param name="createdAt">Date time of event creation (required).</param>
        public WebhookNewContactPayload(string messageId = default(string), Guid webhookId = default(Guid), string webhookName = default(string), EventNameEnum eventName = default(EventNameEnum), Guid contactId = default(Guid), Guid? groupId = default(Guid?), string firstName = default(string), string lastName = default(string), string company = default(string), string primaryEmailAddress = default(string), List<string> emailAddresses = default(List<string>), List<string> tags = default(List<string>), Object metaData = default(Object), bool optOut = default(bool), DateTime createdAt = default(DateTime))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookNewContactPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.ContactId = contactId;
            // to ensure "emailAddresses" is required (not null)
            if (emailAddresses == null)
            {
                throw new ArgumentNullException("emailAddresses is a required property for WebhookNewContactPayload and cannot be null");
            }
            this.EmailAddresses = emailAddresses;
            // to ensure "tags" is required (not null)
            if (tags == null)
            {
                throw new ArgumentNullException("tags is a required property for WebhookNewContactPayload and cannot be null");
            }
            this.Tags = tags;
            this.OptOut = optOut;
            this.CreatedAt = createdAt;
            this.WebhookName = webhookName;
            this.GroupId = groupId;
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Company = company;
            this.PrimaryEmailAddress = primaryEmailAddress;
            this.MetaData = metaData;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// Contact ID
        /// </summary>
        /// <value>Contact ID</value>
        [DataMember(Name = "contactId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ContactId { get; set; }

        /// <summary>
        /// Contact group ID
        /// </summary>
        /// <value>Contact group ID</value>
        [DataMember(Name = "groupId", EmitDefaultValue = true)]
        public Guid? GroupId { get; set; }

        /// <summary>
        /// Contact first name
        /// </summary>
        /// <value>Contact first name</value>
        [DataMember(Name = "firstName", EmitDefaultValue = true)]
        public string FirstName { get; set; }

        /// <summary>
        /// Contact last name
        /// </summary>
        /// <value>Contact last name</value>
        [DataMember(Name = "lastName", EmitDefaultValue = true)]
        public string LastName { get; set; }

        /// <summary>
        /// Contact company name
        /// </summary>
        /// <value>Contact company name</value>
        [DataMember(Name = "company", EmitDefaultValue = true)]
        public string Company { get; set; }

        /// <summary>
        /// Primary email address for contact
        /// </summary>
        /// <value>Primary email address for contact</value>
        [DataMember(Name = "primaryEmailAddress", EmitDefaultValue = true)]
        public string PrimaryEmailAddress { get; set; }

        /// <summary>
        /// Email addresses for contact
        /// </summary>
        /// <value>Email addresses for contact</value>
        [DataMember(Name = "emailAddresses", IsRequired = true, EmitDefaultValue = true)]
        public List<string> EmailAddresses { get; set; }

        /// <summary>
        /// Tags for contact
        /// </summary>
        /// <value>Tags for contact</value>
        [DataMember(Name = "tags", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Gets or Sets MetaData
        /// </summary>
        [DataMember(Name = "metaData", EmitDefaultValue = true)]
        public Object MetaData { get; set; }

        /// <summary>
        /// Has contact opted out of emails
        /// </summary>
        /// <value>Has contact opted out of emails</value>
        [DataMember(Name = "optOut", IsRequired = true, EmitDefaultValue = true)]
        public bool OptOut { get; set; }

        /// <summary>
        /// Date time of event creation
        /// </summary>
        /// <value>Date time of event creation</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookNewContactPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  ContactId: ").Append(ContactId).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("  FirstName: ").Append(FirstName).Append("\n");
            sb.Append("  LastName: ").Append(LastName).Append("\n");
            sb.Append("  Company: ").Append(Company).Append("\n");
            sb.Append("  PrimaryEmailAddress: ").Append(PrimaryEmailAddress).Append("\n");
            sb.Append("  EmailAddresses: ").Append(EmailAddresses).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  MetaData: ").Append(MetaData).Append("\n");
            sb.Append("  OptOut: ").Append(OptOut).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookNewContactPayload);
        }

        /// <summary>
        /// Returns true if WebhookNewContactPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookNewContactPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookNewContactPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.ContactId == input.ContactId ||
                    (this.ContactId != null &&
                    this.ContactId.Equals(input.ContactId))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                ) && 
                (
                    this.FirstName == input.FirstName ||
                    (this.FirstName != null &&
                    this.FirstName.Equals(input.FirstName))
                ) && 
                (
                    this.LastName == input.LastName ||
                    (this.LastName != null &&
                    this.LastName.Equals(input.LastName))
                ) && 
                (
                    this.Company == input.Company ||
                    (this.Company != null &&
                    this.Company.Equals(input.Company))
                ) && 
                (
                    this.PrimaryEmailAddress == input.PrimaryEmailAddress ||
                    (this.PrimaryEmailAddress != null &&
                    this.PrimaryEmailAddress.Equals(input.PrimaryEmailAddress))
                ) && 
                (
                    this.EmailAddresses == input.EmailAddresses ||
                    this.EmailAddresses != null &&
                    input.EmailAddresses != null &&
                    this.EmailAddresses.SequenceEqual(input.EmailAddresses)
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.MetaData == input.MetaData ||
                    (this.MetaData != null &&
                    this.MetaData.Equals(input.MetaData))
                ) && 
                (
                    this.OptOut == input.OptOut ||
                    this.OptOut.Equals(input.OptOut)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.ContactId != null)
                {
                    hashCode = (hashCode * 59) + this.ContactId.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                if (this.FirstName != null)
                {
                    hashCode = (hashCode * 59) + this.FirstName.GetHashCode();
                }
                if (this.LastName != null)
                {
                    hashCode = (hashCode * 59) + this.LastName.GetHashCode();
                }
                if (this.Company != null)
                {
                    hashCode = (hashCode * 59) + this.Company.GetHashCode();
                }
                if (this.PrimaryEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.PrimaryEmailAddress.GetHashCode();
                }
                if (this.EmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddresses.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                if (this.MetaData != null)
                {
                    hashCode = (hashCode * 59) + this.MetaData.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.OptOut.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookNewAttachmentPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// NEW_ATTACHMENT webhook payload. Sent to your webhook url endpoint via HTTP POST when an email is received by the inbox that your webhook is attached to that contains an attachment. You can use the attachmentId to download the attachment.
    /// </summary>
    [DataContract(Name = "WebhookNewAttachmentPayload")]
    public partial class WebhookNewAttachmentPayload : IEquatable<WebhookNewAttachmentPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewAttachmentPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookNewAttachmentPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookNewAttachmentPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="attachmentId">ID of attachment. Use the &#x60;AttachmentController&#x60; to (required).</param>
        /// <param name="name">Filename of the attachment if present (required).</param>
        /// <param name="contentType">Content type of attachment such as &#39;image/png&#39; or &#39;application/pdf (required).</param>
        /// <param name="contentLength">Size of attachment in bytes (required).</param>
        public WebhookNewAttachmentPayload(string messageId = default(string), Guid webhookId = default(Guid), string webhookName = default(string), EventNameEnum eventName = default(EventNameEnum), string attachmentId = default(string), string name = default(string), string contentType = default(string), long contentLength = default(long))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookNewAttachmentPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            // to ensure "attachmentId" is required (not null)
            if (attachmentId == null)
            {
                throw new ArgumentNullException("attachmentId is a required property for WebhookNewAttachmentPayload and cannot be null");
            }
            this.AttachmentId = attachmentId;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for WebhookNewAttachmentPayload and cannot be null");
            }
            this.Name = name;
            // to ensure "contentType" is required (not null)
            if (contentType == null)
            {
                throw new ArgumentNullException("contentType is a required property for WebhookNewAttachmentPayload and cannot be null");
            }
            this.ContentType = contentType;
            this.ContentLength = contentLength;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// ID of attachment. Use the &#x60;AttachmentController&#x60; to
        /// </summary>
        /// <value>ID of attachment. Use the &#x60;AttachmentController&#x60; to</value>
        [DataMember(Name = "attachmentId", IsRequired = true, EmitDefaultValue = true)]
        public string AttachmentId { get; set; }

        /// <summary>
        /// Filename of the attachment if present
        /// </summary>
        /// <value>Filename of the attachment if present</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Content type of attachment such as &#39;image/png&#39; or &#39;application/pdf
        /// </summary>
        /// <value>Content type of attachment such as &#39;image/png&#39; or &#39;application/pdf</value>
        [DataMember(Name = "contentType", IsRequired = true, EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Size of attachment in bytes
        /// </summary>
        /// <value>Size of attachment in bytes</value>
        [DataMember(Name = "contentLength", IsRequired = true, EmitDefaultValue = true)]
        public long ContentLength { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookNewAttachmentPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  AttachmentId: ").Append(AttachmentId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  ContentLength: ").Append(ContentLength).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookNewAttachmentPayload);
        }

        /// <summary>
        /// Returns true if WebhookNewAttachmentPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookNewAttachmentPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookNewAttachmentPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.AttachmentId == input.AttachmentId ||
                    (this.AttachmentId != null &&
                    this.AttachmentId.Equals(input.AttachmentId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.ContentLength == input.ContentLength ||
                    this.ContentLength.Equals(input.ContentLength)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.AttachmentId != null)
                {
                    hashCode = (hashCode * 59) + this.AttachmentId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ContentLength.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookHeaders.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Webhook HTTP headers to include with each request from MailSlurp to your server
    /// </summary>
    [DataContract(Name = "WebhookHeaders")]
    public partial class WebhookHeaders : IEquatable<WebhookHeaders>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookHeaders" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookHeaders() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookHeaders" /> class.
        /// </summary>
        /// <param name="headers">List of header name value pairs to include with webhook requests (required).</param>
        public WebhookHeaders(List<WebhookHeaderNameValue> headers = default(List<WebhookHeaderNameValue>))
        {
            // to ensure "headers" is required (not null)
            if (headers == null)
            {
                throw new ArgumentNullException("headers is a required property for WebhookHeaders and cannot be null");
            }
            this.Headers = headers;
        }

        /// <summary>
        /// List of header name value pairs to include with webhook requests
        /// </summary>
        /// <value>List of header name value pairs to include with webhook requests</value>
        [DataMember(Name = "headers", IsRequired = true, EmitDefaultValue = true)]
        public List<WebhookHeaderNameValue> Headers { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookHeaders {\n");
            sb.Append("  Headers: ").Append(Headers).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookHeaders);
        }

        /// <summary>
        /// Returns true if WebhookHeaders instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookHeaders to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookHeaders input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Headers == input.Headers ||
                    this.Headers != null &&
                    input.Headers != null &&
                    this.Headers.SequenceEqual(input.Headers)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Headers != null)
                {
                    hashCode = (hashCode * 59) + this.Headers.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookHeaderNameValue.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Name value pair for webhook header
    /// </summary>
    [DataContract(Name = "WebhookHeaderNameValue")]
    public partial class WebhookHeaderNameValue : IEquatable<WebhookHeaderNameValue>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookHeaderNameValue" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookHeaderNameValue() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookHeaderNameValue" /> class.
        /// </summary>
        /// <param name="name">Name of header (required).</param>
        /// <param name="value">Value of header (required).</param>
        public WebhookHeaderNameValue(string name = default(string), string value = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for WebhookHeaderNameValue and cannot be null");
            }
            this.Name = name;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for WebhookHeaderNameValue and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Name of header
        /// </summary>
        /// <value>Name of header</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Value of header
        /// </summary>
        /// <value>Value of header</value>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookHeaderNameValue {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookHeaderNameValue);
        }

        /// <summary>
        /// Returns true if WebhookHeaderNameValue instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookHeaderNameValue to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookHeaderNameValue input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookEmailReadPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EMAIL_READ webhook payload. Sent to your webhook url endpoint via HTTP POST when an email is read. This happens when an email is requested in full from the API or a user views the email in the dashboard.
    /// </summary>
    [DataContract(Name = "WebhookEmailReadPayload")]
    public partial class WebhookEmailReadPayload : IEquatable<WebhookEmailReadPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookEmailReadPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookEmailReadPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookEmailReadPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="emailId">ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;. (required).</param>
        /// <param name="inboxId">Id of the inbox (required).</param>
        /// <param name="emailIsRead">Is the email read (required).</param>
        /// <param name="createdAt">Date time of event creation (required).</param>
        public WebhookEmailReadPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid emailId = default(Guid), Guid inboxId = default(Guid), bool emailIsRead = default(bool), DateTime createdAt = default(DateTime))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookEmailReadPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.EmailId = emailId;
            this.InboxId = inboxId;
            this.EmailIsRead = emailIsRead;
            this.CreatedAt = createdAt;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;.
        /// </summary>
        /// <value>ID of the email that was received. Use this ID for fetching the email with the &#x60;EmailController&#x60;.</value>
        [DataMember(Name = "emailId", IsRequired = true, EmitDefaultValue = true)]
        public Guid EmailId { get; set; }

        /// <summary>
        /// Id of the inbox
        /// </summary>
        /// <value>Id of the inbox</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Is the email read
        /// </summary>
        /// <value>Is the email read</value>
        [DataMember(Name = "emailIsRead", IsRequired = true, EmitDefaultValue = true)]
        public bool EmailIsRead { get; set; }

        /// <summary>
        /// Date time of event creation
        /// </summary>
        /// <value>Date time of event creation</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookEmailReadPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailIsRead: ").Append(EmailIsRead).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookEmailReadPayload);
        }

        /// <summary>
        /// Returns true if WebhookEmailReadPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookEmailReadPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookEmailReadPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailIsRead == input.EmailIsRead ||
                    this.EmailIsRead.Equals(input.EmailIsRead)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EmailIsRead.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookEmailOpenedPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EMAIL_OPENED webhook payload. Sent to your webhook url endpoint via HTTP POST when an email containing a tracking pixel is opened and the pixel image is loaded by a reader.
    /// </summary>
    [DataContract(Name = "WebhookEmailOpenedPayload")]
    public partial class WebhookEmailOpenedPayload : IEquatable<WebhookEmailOpenedPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookEmailOpenedPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookEmailOpenedPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookEmailOpenedPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="inboxId">Id of the inbox (required).</param>
        /// <param name="pixelId">ID of the tracking pixel (required).</param>
        /// <param name="sentEmailId">ID of sent email (required).</param>
        /// <param name="recipient">Email address for the recipient of the tracking pixel (required).</param>
        /// <param name="createdAt">Date time of event creation (required).</param>
        public WebhookEmailOpenedPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid inboxId = default(Guid), Guid pixelId = default(Guid), Guid sentEmailId = default(Guid), string recipient = default(string), DateTime createdAt = default(DateTime))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookEmailOpenedPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.InboxId = inboxId;
            this.PixelId = pixelId;
            this.SentEmailId = sentEmailId;
            // to ensure "recipient" is required (not null)
            if (recipient == null)
            {
                throw new ArgumentNullException("recipient is a required property for WebhookEmailOpenedPayload and cannot be null");
            }
            this.Recipient = recipient;
            this.CreatedAt = createdAt;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// Id of the inbox
        /// </summary>
        /// <value>Id of the inbox</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// ID of the tracking pixel
        /// </summary>
        /// <value>ID of the tracking pixel</value>
        [DataMember(Name = "pixelId", IsRequired = true, EmitDefaultValue = true)]
        public Guid PixelId { get; set; }

        /// <summary>
        /// ID of sent email
        /// </summary>
        /// <value>ID of sent email</value>
        [DataMember(Name = "sentEmailId", IsRequired = true, EmitDefaultValue = true)]
        public Guid SentEmailId { get; set; }

        /// <summary>
        /// Email address for the recipient of the tracking pixel
        /// </summary>
        /// <value>Email address for the recipient of the tracking pixel</value>
        [DataMember(Name = "recipient", IsRequired = true, EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Date time of event creation
        /// </summary>
        /// <value>Date time of event creation</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookEmailOpenedPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  PixelId: ").Append(PixelId).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookEmailOpenedPayload);
        }

        /// <summary>
        /// Returns true if WebhookEmailOpenedPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookEmailOpenedPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookEmailOpenedPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.PixelId == input.PixelId ||
                    (this.PixelId != null &&
                    this.PixelId.Equals(input.PixelId))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.PixelId != null)
                {
                    hashCode = (hashCode * 59) + this.PixelId.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Representation of a webhook for an inbox. The URL specified will be using by MailSlurp whenever an email is received by the attached inbox. A webhook entity should have a URL that points to your server. Your server should accept HTTP/S POST requests and return a success 200. MailSlurp will retry your webhooks if they fail. See https://csharp.api.mailslurp.com/schemas/webhook-payload for the payload schema.
    /// </summary>
    [DataContract(Name = "WebhookDto")]
    public partial class WebhookDto : IEquatable<WebhookDto>, IValidatableObject
    {
        /// <summary>
        /// HTTP method that your server endpoint must listen for
        /// </summary>
        /// <value>HTTP method that your server endpoint must listen for</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum MethodEnum
        {
            /// <summary>
            /// Enum POST for value: POST
            /// </summary>
            [EnumMember(Value = "POST")]
            POST = 1,

            /// <summary>
            /// Enum DELETE for value: DELETE
            /// </summary>
            [EnumMember(Value = "DELETE")]
            DELETE = 2,

            /// <summary>
            /// Enum GET for value: GET
            /// </summary>
            [EnumMember(Value = "GET")]
            GET = 3,

            /// <summary>
            /// Enum PUT for value: PUT
            /// </summary>
            [EnumMember(Value = "PUT")]
            PUT = 4,

            /// <summary>
            /// Enum PATCH for value: PATCH
            /// </summary>
            [EnumMember(Value = "PATCH")]
            PATCH = 5,

            /// <summary>
            /// Enum HEAD for value: HEAD
            /// </summary>
            [EnumMember(Value = "HEAD")]
            HEAD = 6,

            /// <summary>
            /// Enum OPTIONS for value: OPTIONS
            /// </summary>
            [EnumMember(Value = "OPTIONS")]
            OPTIONS = 7,

            /// <summary>
            /// Enum TRACE for value: TRACE
            /// </summary>
            [EnumMember(Value = "TRACE")]
            TRACE = 8

        }


        /// <summary>
        /// HTTP method that your server endpoint must listen for
        /// </summary>
        /// <value>HTTP method that your server endpoint must listen for</value>
        [DataMember(Name = "method", IsRequired = true, EmitDefaultValue = true)]
        public MethodEnum Method { get; set; }
        /// <summary>
        /// Webhook trigger event name
        /// </summary>
        /// <value>Webhook trigger event name</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Webhook trigger event name
        /// </summary>
        /// <value>Webhook trigger event name</value>
        [DataMember(Name = "eventName", EmitDefaultValue = true)]
        public EventNameEnum? EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookDto" /> class.
        /// </summary>
        /// <param name="id">ID of the Webhook (required).</param>
        /// <param name="userId">User ID of the Webhook (required).</param>
        /// <param name="basicAuth">Does webhook expect basic authentication? If true it means you created this webhook with a username and password. MailSlurp will use these in the URL to authenticate itself. (required).</param>
        /// <param name="name">Name of the webhook.</param>
        /// <param name="phoneId">The phoneNumberId that the Webhook will be triggered by. If null then webhook triggered at account level or inbox level if inboxId set.</param>
        /// <param name="inboxId">The inbox that the Webhook will be triggered by. If null then webhook triggered at account level or phone level if phoneId set.</param>
        /// <param name="requestBodyTemplate">Request body template for HTTP request that will be sent for the webhook. Use Moustache style template variables to insert values from the original event payload..</param>
        /// <param name="url">URL of your server that the webhook will be sent to. The schema of the JSON that is sent is described by the payloadJsonSchema. (required).</param>
        /// <param name="method">HTTP method that your server endpoint must listen for (required).</param>
        /// <param name="payloadJsonSchema">Deprecated. Fetch JSON Schema for webhook using the getJsonSchemaForWebhookPayload method (required).</param>
        /// <param name="createdAt">When the webhook was created (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="eventName">Webhook trigger event name.</param>
        /// <param name="requestHeaders">requestHeaders.</param>
        /// <param name="ignoreInsecureSslCertificates">Should notifier ignore insecure SSL certificates.</param>
        /// <param name="useStaticIpRange">Should notifier use static IP range when sending webhook payload.</param>
        public WebhookDto(Guid id = default(Guid), Guid userId = default(Guid), bool basicAuth = default(bool), string name = default(string), Guid? phoneId = default(Guid?), Guid? inboxId = default(Guid?), string requestBodyTemplate = default(string), string url = default(string), MethodEnum method = default(MethodEnum), string payloadJsonSchema = default(string), DateTime? createdAt = default(DateTime?), DateTime updatedAt = default(DateTime), EventNameEnum? eventName = default(EventNameEnum?), WebhookHeaders requestHeaders = default(WebhookHeaders), bool? ignoreInsecureSslCertificates = default(bool?), bool? useStaticIpRange = default(bool?))
        {
            this.Id = id;
            this.UserId = userId;
            this.BasicAuth = basicAuth;
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for WebhookDto and cannot be null");
            }
            this.Url = url;
            this.Method = method;
            // to ensure "payloadJsonSchema" is required (not null)
            if (payloadJsonSchema == null)
            {
                throw new ArgumentNullException("payloadJsonSchema is a required property for WebhookDto and cannot be null");
            }
            this.PayloadJsonSchema = payloadJsonSchema;
            // to ensure "createdAt" is required (not null)
            if (createdAt == null)
            {
                throw new ArgumentNullException("createdAt is a required property for WebhookDto and cannot be null");
            }
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Name = name;
            this.PhoneId = phoneId;
            this.InboxId = inboxId;
            this.RequestBodyTemplate = requestBodyTemplate;
            this.EventName = eventName;
            this.RequestHeaders = requestHeaders;
            this.IgnoreInsecureSslCertificates = ignoreInsecureSslCertificates;
            this.UseStaticIpRange = useStaticIpRange;
        }

        /// <summary>
        /// ID of the Webhook
        /// </summary>
        /// <value>ID of the Webhook</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// User ID of the Webhook
        /// </summary>
        /// <value>User ID of the Webhook</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Does webhook expect basic authentication? If true it means you created this webhook with a username and password. MailSlurp will use these in the URL to authenticate itself.
        /// </summary>
        /// <value>Does webhook expect basic authentication? If true it means you created this webhook with a username and password. MailSlurp will use these in the URL to authenticate itself.</value>
        [DataMember(Name = "basicAuth", IsRequired = true, EmitDefaultValue = true)]
        public bool BasicAuth { get; set; }

        /// <summary>
        /// Name of the webhook
        /// </summary>
        /// <value>Name of the webhook</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// The phoneNumberId that the Webhook will be triggered by. If null then webhook triggered at account level or inbox level if inboxId set
        /// </summary>
        /// <value>The phoneNumberId that the Webhook will be triggered by. If null then webhook triggered at account level or inbox level if inboxId set</value>
        [DataMember(Name = "phoneId", EmitDefaultValue = true)]
        public Guid? PhoneId { get; set; }

        /// <summary>
        /// The inbox that the Webhook will be triggered by. If null then webhook triggered at account level or phone level if phoneId set
        /// </summary>
        /// <value>The inbox that the Webhook will be triggered by. If null then webhook triggered at account level or phone level if phoneId set</value>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Request body template for HTTP request that will be sent for the webhook. Use Moustache style template variables to insert values from the original event payload.
        /// </summary>
        /// <value>Request body template for HTTP request that will be sent for the webhook. Use Moustache style template variables to insert values from the original event payload.</value>
        [DataMember(Name = "requestBodyTemplate", EmitDefaultValue = true)]
        public string RequestBodyTemplate { get; set; }

        /// <summary>
        /// URL of your server that the webhook will be sent to. The schema of the JSON that is sent is described by the payloadJsonSchema.
        /// </summary>
        /// <value>URL of your server that the webhook will be sent to. The schema of the JSON that is sent is described by the payloadJsonSchema.</value>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Deprecated. Fetch JSON Schema for webhook using the getJsonSchemaForWebhookPayload method
        /// </summary>
        /// <value>Deprecated. Fetch JSON Schema for webhook using the getJsonSchemaForWebhookPayload method</value>
        [DataMember(Name = "payloadJsonSchema", IsRequired = true, EmitDefaultValue = true)]
        public string PayloadJsonSchema { get; set; }

        /// <summary>
        /// When the webhook was created
        /// </summary>
        /// <value>When the webhook was created</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime? CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets RequestHeaders
        /// </summary>
        [DataMember(Name = "requestHeaders", EmitDefaultValue = false)]
        public WebhookHeaders RequestHeaders { get; set; }

        /// <summary>
        /// Should notifier ignore insecure SSL certificates
        /// </summary>
        /// <value>Should notifier ignore insecure SSL certificates</value>
        [DataMember(Name = "ignoreInsecureSslCertificates", EmitDefaultValue = true)]
        public bool? IgnoreInsecureSslCertificates { get; set; }

        /// <summary>
        /// Should notifier use static IP range when sending webhook payload
        /// </summary>
        /// <value>Should notifier use static IP range when sending webhook payload</value>
        [DataMember(Name = "useStaticIpRange", EmitDefaultValue = true)]
        public bool? UseStaticIpRange { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  BasicAuth: ").Append(BasicAuth).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  PhoneId: ").Append(PhoneId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  RequestBodyTemplate: ").Append(RequestBodyTemplate).Append("\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  Method: ").Append(Method).Append("\n");
            sb.Append("  PayloadJsonSchema: ").Append(PayloadJsonSchema).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  RequestHeaders: ").Append(RequestHeaders).Append("\n");
            sb.Append("  IgnoreInsecureSslCertificates: ").Append(IgnoreInsecureSslCertificates).Append("\n");
            sb.Append("  UseStaticIpRange: ").Append(UseStaticIpRange).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookDto);
        }

        /// <summary>
        /// Returns true if WebhookDto instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.BasicAuth == input.BasicAuth ||
                    this.BasicAuth.Equals(input.BasicAuth)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.PhoneId == input.PhoneId ||
                    (this.PhoneId != null &&
                    this.PhoneId.Equals(input.PhoneId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.RequestBodyTemplate == input.RequestBodyTemplate ||
                    (this.RequestBodyTemplate != null &&
                    this.RequestBodyTemplate.Equals(input.RequestBodyTemplate))
                ) && 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.Method == input.Method ||
                    this.Method.Equals(input.Method)
                ) && 
                (
                    this.PayloadJsonSchema == input.PayloadJsonSchema ||
                    (this.PayloadJsonSchema != null &&
                    this.PayloadJsonSchema.Equals(input.PayloadJsonSchema))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.RequestHeaders == input.RequestHeaders ||
                    (this.RequestHeaders != null &&
                    this.RequestHeaders.Equals(input.RequestHeaders))
                ) && 
                (
                    this.IgnoreInsecureSslCertificates == input.IgnoreInsecureSslCertificates ||
                    (this.IgnoreInsecureSslCertificates != null &&
                    this.IgnoreInsecureSslCertificates.Equals(input.IgnoreInsecureSslCertificates))
                ) && 
                (
                    this.UseStaticIpRange == input.UseStaticIpRange ||
                    (this.UseStaticIpRange != null &&
                    this.UseStaticIpRange.Equals(input.UseStaticIpRange))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.BasicAuth.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.PhoneId != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.RequestBodyTemplate != null)
                {
                    hashCode = (hashCode * 59) + this.RequestBodyTemplate.GetHashCode();
                }
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Method.GetHashCode();
                if (this.PayloadJsonSchema != null)
                {
                    hashCode = (hashCode * 59) + this.PayloadJsonSchema.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.RequestHeaders != null)
                {
                    hashCode = (hashCode * 59) + this.RequestHeaders.GetHashCode();
                }
                if (this.IgnoreInsecureSslCertificates != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreInsecureSslCertificates.GetHashCode();
                }
                if (this.UseStaticIpRange != null)
                {
                    hashCode = (hashCode * 59) + this.UseStaticIpRange.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookDeliveryStatusPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DELIVERY_STATUS webhook payload. Sent to your webhook url endpoint via HTTP POST when an email delivery status is created. This could be a successful delivery or a delivery failure.
    /// </summary>
    [DataContract(Name = "WebhookDeliveryStatusPayload")]
    public partial class WebhookDeliveryStatusPayload : IEquatable<WebhookDeliveryStatusPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookDeliveryStatusPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookDeliveryStatusPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookDeliveryStatusPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="id">ID of delivery status (required).</param>
        /// <param name="userId">User ID of event (required).</param>
        /// <param name="sentId">ID of sent email.</param>
        /// <param name="remoteMtaIp">IP address of the remote Mail Transfer Agent.</param>
        /// <param name="inboxId">Id of the inbox.</param>
        /// <param name="reportingMta">Mail Transfer Agent reporting delivery status.</param>
        /// <param name="recipients">Recipients for delivery.</param>
        /// <param name="smtpResponse">SMTP server response message.</param>
        /// <param name="smtpStatusCode">SMTP server status.</param>
        /// <param name="processingTimeMillis">Time in milliseconds for delivery processing.</param>
        /// <param name="received">Time event was received.</param>
        /// <param name="subject">Email subject.</param>
        public WebhookDeliveryStatusPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid id = default(Guid), Guid userId = default(Guid), Guid? sentId = default(Guid?), string remoteMtaIp = default(string), Guid? inboxId = default(Guid?), string reportingMta = default(string), List<string> recipients = default(List<string>), string smtpResponse = default(string), int? smtpStatusCode = default(int?), long? processingTimeMillis = default(long?), DateTime? received = default(DateTime?), string subject = default(string))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookDeliveryStatusPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.Id = id;
            this.UserId = userId;
            this.WebhookName = webhookName;
            this.SentId = sentId;
            this.RemoteMtaIp = remoteMtaIp;
            this.InboxId = inboxId;
            this.ReportingMta = reportingMta;
            this.Recipients = recipients;
            this.SmtpResponse = smtpResponse;
            this.SmtpStatusCode = smtpStatusCode;
            this.ProcessingTimeMillis = processingTimeMillis;
            this.Received = received;
            this.Subject = subject;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// ID of delivery status
        /// </summary>
        /// <value>ID of delivery status</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// User ID of event
        /// </summary>
        /// <value>User ID of event</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// ID of sent email
        /// </summary>
        /// <value>ID of sent email</value>
        [DataMember(Name = "sentId", EmitDefaultValue = true)]
        public Guid? SentId { get; set; }

        /// <summary>
        /// IP address of the remote Mail Transfer Agent
        /// </summary>
        /// <value>IP address of the remote Mail Transfer Agent</value>
        [DataMember(Name = "remoteMtaIp", EmitDefaultValue = true)]
        public string RemoteMtaIp { get; set; }

        /// <summary>
        /// Id of the inbox
        /// </summary>
        /// <value>Id of the inbox</value>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Mail Transfer Agent reporting delivery status
        /// </summary>
        /// <value>Mail Transfer Agent reporting delivery status</value>
        [DataMember(Name = "reportingMta", EmitDefaultValue = true)]
        public string ReportingMta { get; set; }

        /// <summary>
        /// Recipients for delivery
        /// </summary>
        /// <value>Recipients for delivery</value>
        [DataMember(Name = "recipients", EmitDefaultValue = true)]
        public List<string> Recipients { get; set; }

        /// <summary>
        /// SMTP server response message
        /// </summary>
        /// <value>SMTP server response message</value>
        [DataMember(Name = "smtpResponse", EmitDefaultValue = true)]
        public string SmtpResponse { get; set; }

        /// <summary>
        /// SMTP server status
        /// </summary>
        /// <value>SMTP server status</value>
        [DataMember(Name = "smtpStatusCode", EmitDefaultValue = true)]
        public int? SmtpStatusCode { get; set; }

        /// <summary>
        /// Time in milliseconds for delivery processing
        /// </summary>
        /// <value>Time in milliseconds for delivery processing</value>
        [DataMember(Name = "processingTimeMillis", EmitDefaultValue = true)]
        public long? ProcessingTimeMillis { get; set; }

        /// <summary>
        /// Time event was received
        /// </summary>
        /// <value>Time event was received</value>
        [DataMember(Name = "received", EmitDefaultValue = true)]
        public DateTime? Received { get; set; }

        /// <summary>
        /// Email subject
        /// </summary>
        /// <value>Email subject</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookDeliveryStatusPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SentId: ").Append(SentId).Append("\n");
            sb.Append("  RemoteMtaIp: ").Append(RemoteMtaIp).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  ReportingMta: ").Append(ReportingMta).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  SmtpResponse: ").Append(SmtpResponse).Append("\n");
            sb.Append("  SmtpStatusCode: ").Append(SmtpStatusCode).Append("\n");
            sb.Append("  ProcessingTimeMillis: ").Append(ProcessingTimeMillis).Append("\n");
            sb.Append("  Received: ").Append(Received).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookDeliveryStatusPayload);
        }

        /// <summary>
        /// Returns true if WebhookDeliveryStatusPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookDeliveryStatusPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookDeliveryStatusPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SentId == input.SentId ||
                    (this.SentId != null &&
                    this.SentId.Equals(input.SentId))
                ) && 
                (
                    this.RemoteMtaIp == input.RemoteMtaIp ||
                    (this.RemoteMtaIp != null &&
                    this.RemoteMtaIp.Equals(input.RemoteMtaIp))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.ReportingMta == input.ReportingMta ||
                    (this.ReportingMta != null &&
                    this.ReportingMta.Equals(input.ReportingMta))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    this.Recipients != null &&
                    input.Recipients != null &&
                    this.Recipients.SequenceEqual(input.Recipients)
                ) && 
                (
                    this.SmtpResponse == input.SmtpResponse ||
                    (this.SmtpResponse != null &&
                    this.SmtpResponse.Equals(input.SmtpResponse))
                ) && 
                (
                    this.SmtpStatusCode == input.SmtpStatusCode ||
                    (this.SmtpStatusCode != null &&
                    this.SmtpStatusCode.Equals(input.SmtpStatusCode))
                ) && 
                (
                    this.ProcessingTimeMillis == input.ProcessingTimeMillis ||
                    (this.ProcessingTimeMillis != null &&
                    this.ProcessingTimeMillis.Equals(input.ProcessingTimeMillis))
                ) && 
                (
                    this.Received == input.Received ||
                    (this.Received != null &&
                    this.Received.Equals(input.Received))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.SentId != null)
                {
                    hashCode = (hashCode * 59) + this.SentId.GetHashCode();
                }
                if (this.RemoteMtaIp != null)
                {
                    hashCode = (hashCode * 59) + this.RemoteMtaIp.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.ReportingMta != null)
                {
                    hashCode = (hashCode * 59) + this.ReportingMta.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.SmtpResponse != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpResponse.GetHashCode();
                }
                if (this.SmtpStatusCode != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpStatusCode.GetHashCode();
                }
                if (this.ProcessingTimeMillis != null)
                {
                    hashCode = (hashCode * 59) + this.ProcessingTimeMillis.GetHashCode();
                }
                if (this.Received != null)
                {
                    hashCode = (hashCode * 59) + this.Received.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookBounceRecipientPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// BOUNCE_RECIPIENT webhook payload. Sent to your webhook url endpoint via HTTP POST when an email caused a bounce to occur for a recipient. Save the recipient to a ban list of your server and avoid email them again.
    /// </summary>
    [DataContract(Name = "WebhookBounceRecipientPayload")]
    public partial class WebhookBounceRecipientPayload : IEquatable<WebhookBounceRecipientPayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookBounceRecipientPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookBounceRecipientPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookBounceRecipientPayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="recipient">Email address that caused a bounce. Make note of the address and try not to message it again to preserve your reputation. (required).</param>
        public WebhookBounceRecipientPayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), string recipient = default(string))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookBounceRecipientPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            // to ensure "recipient" is required (not null)
            if (recipient == null)
            {
                throw new ArgumentNullException("recipient is a required property for WebhookBounceRecipientPayload and cannot be null");
            }
            this.Recipient = recipient;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// Email address that caused a bounce. Make note of the address and try not to message it again to preserve your reputation.
        /// </summary>
        /// <value>Email address that caused a bounce. Make note of the address and try not to message it again to preserve your reputation.</value>
        [DataMember(Name = "recipient", IsRequired = true, EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookBounceRecipientPayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookBounceRecipientPayload);
        }

        /// <summary>
        /// Returns true if WebhookBounceRecipientPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookBounceRecipientPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookBounceRecipientPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WebhookBouncePayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// BOUNCE webhook payload. Sent to your webhook url endpoint via HTTP POST when an email bounced or was rejected by a recipient. Save the recipients to a ban list on your server and avoid emailing them again. It is recommended you also listen to the BOUNCE_RECIPIENT payload.
    /// </summary>
    [DataContract(Name = "WebhookBouncePayload")]
    public partial class WebhookBouncePayload : IEquatable<WebhookBouncePayload>, IValidatableObject
    {
        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Name of the event type webhook is being triggered for.
        /// </summary>
        /// <value>Name of the event type webhook is being triggered for.</value>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookBouncePayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WebhookBouncePayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookBouncePayload" /> class.
        /// </summary>
        /// <param name="messageId">Idempotent message ID. Store this ID locally or in a database to prevent message duplication. (required).</param>
        /// <param name="webhookId">ID of webhook entity being triggered (required).</param>
        /// <param name="eventName">Name of the event type webhook is being triggered for. (required).</param>
        /// <param name="webhookName">Name of the webhook being triggered.</param>
        /// <param name="bounceId">ID of the bounce email record. Use the ID with the bounce controller to view more information (required).</param>
        /// <param name="sentToRecipients">Email sent to recipients.</param>
        /// <param name="sender">Sender causing bounce (required).</param>
        /// <param name="bounceRecipients">Email addresses that resulted in a bounce or email being rejected. Please save these recipients and avoid emailing them in the future to maintain your reputation..</param>
        public WebhookBouncePayload(string messageId = default(string), Guid webhookId = default(Guid), EventNameEnum eventName = default(EventNameEnum), string webhookName = default(string), Guid bounceId = default(Guid), List<string> sentToRecipients = default(List<string>), string sender = default(string), List<string> bounceRecipients = default(List<string>))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for WebhookBouncePayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.EventName = eventName;
            this.BounceId = bounceId;
            // to ensure "sender" is required (not null)
            if (sender == null)
            {
                throw new ArgumentNullException("sender is a required property for WebhookBouncePayload and cannot be null");
            }
            this.Sender = sender;
            this.WebhookName = webhookName;
            this.SentToRecipients = sentToRecipients;
            this.BounceRecipients = bounceRecipients;
        }

        /// <summary>
        /// Idempotent message ID. Store this ID locally or in a database to prevent message duplication.
        /// </summary>
        /// <value>Idempotent message ID. Store this ID locally or in a database to prevent message duplication.</value>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// ID of webhook entity being triggered
        /// </summary>
        /// <value>ID of webhook entity being triggered</value>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Name of the webhook being triggered
        /// </summary>
        /// <value>Name of the webhook being triggered</value>
        [DataMember(Name = "webhookName", EmitDefaultValue = true)]
        public string WebhookName { get; set; }

        /// <summary>
        /// ID of the bounce email record. Use the ID with the bounce controller to view more information
        /// </summary>
        /// <value>ID of the bounce email record. Use the ID with the bounce controller to view more information</value>
        [DataMember(Name = "bounceId", IsRequired = true, EmitDefaultValue = true)]
        public Guid BounceId { get; set; }

        /// <summary>
        /// Email sent to recipients
        /// </summary>
        /// <value>Email sent to recipients</value>
        [DataMember(Name = "sentToRecipients", EmitDefaultValue = true)]
        public List<string> SentToRecipients { get; set; }

        /// <summary>
        /// Sender causing bounce
        /// </summary>
        /// <value>Sender causing bounce</value>
        [DataMember(Name = "sender", IsRequired = true, EmitDefaultValue = true)]
        public string Sender { get; set; }

        /// <summary>
        /// Email addresses that resulted in a bounce or email being rejected. Please save these recipients and avoid emailing them in the future to maintain your reputation.
        /// </summary>
        /// <value>Email addresses that resulted in a bounce or email being rejected. Please save these recipients and avoid emailing them in the future to maintain your reputation.</value>
        [DataMember(Name = "bounceRecipients", EmitDefaultValue = true)]
        public List<string> BounceRecipients { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WebhookBouncePayload {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("  BounceId: ").Append(BounceId).Append("\n");
            sb.Append("  SentToRecipients: ").Append(SentToRecipients).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  BounceRecipients: ").Append(BounceRecipients).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WebhookBouncePayload);
        }

        /// <summary>
        /// Returns true if WebhookBouncePayload instances are equal
        /// </summary>
        /// <param name="input">Instance of WebhookBouncePayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WebhookBouncePayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                ) && 
                (
                    this.BounceId == input.BounceId ||
                    (this.BounceId != null &&
                    this.BounceId.Equals(input.BounceId))
                ) && 
                (
                    this.SentToRecipients == input.SentToRecipients ||
                    this.SentToRecipients != null &&
                    input.SentToRecipients != null &&
                    this.SentToRecipients.SequenceEqual(input.SentToRecipients)
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.BounceRecipients == input.BounceRecipients ||
                    this.BounceRecipients != null &&
                    input.BounceRecipients != null &&
                    this.BounceRecipients.SequenceEqual(input.BounceRecipients)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                if (this.BounceId != null)
                {
                    hashCode = (hashCode * 59) + this.BounceId.GetHashCode();
                }
                if (this.SentToRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.SentToRecipients.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.BounceRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.BounceRecipients.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WaitForSmsConditions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Conditions to apply to emails that you are waiting for
    /// </summary>
    [DataContract(Name = "WaitForSmsConditions")]
    public partial class WaitForSmsConditions : IEquatable<WaitForSmsConditions>, IValidatableObject
    {
        /// <summary>
        /// How result size should be compared with the expected size. Exactly or at-least matching result?
        /// </summary>
        /// <value>How result size should be compared with the expected size. Exactly or at-least matching result?</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum CountTypeEnum
        {
            /// <summary>
            /// Enum EXACTLY for value: EXACTLY
            /// </summary>
            [EnumMember(Value = "EXACTLY")]
            EXACTLY = 1,

            /// <summary>
            /// Enum ATLEAST for value: ATLEAST
            /// </summary>
            [EnumMember(Value = "ATLEAST")]
            ATLEAST = 2

        }


        /// <summary>
        /// How result size should be compared with the expected size. Exactly or at-least matching result?
        /// </summary>
        /// <value>How result size should be compared with the expected size. Exactly or at-least matching result?</value>
        [DataMember(Name = "countType", EmitDefaultValue = true)]
        public CountTypeEnum? CountType { get; set; }
        /// <summary>
        /// Direction to sort matching SMSs by created time
        /// </summary>
        /// <value>Direction to sort matching SMSs by created time</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SortDirectionEnum
        {
            /// <summary>
            /// Enum ASC for value: ASC
            /// </summary>
            [EnumMember(Value = "ASC")]
            ASC = 1,

            /// <summary>
            /// Enum DESC for value: DESC
            /// </summary>
            [EnumMember(Value = "DESC")]
            DESC = 2

        }


        /// <summary>
        /// Direction to sort matching SMSs by created time
        /// </summary>
        /// <value>Direction to sort matching SMSs by created time</value>
        [DataMember(Name = "sortDirection", EmitDefaultValue = true)]
        public SortDirectionEnum? SortDirection { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForSmsConditions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WaitForSmsConditions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForSmsConditions" /> class.
        /// </summary>
        /// <param name="phoneNumberId">ID of phone number to search within and apply conditions to. Essentially filtering the SMS found to give a count. (required).</param>
        /// <param name="limit">Limit results.</param>
        /// <param name="count">Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation. (required).</param>
        /// <param name="delayTimeout">Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified..</param>
        /// <param name="timeout">Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met. (required).</param>
        /// <param name="unreadOnly">Apply conditions only to **unread** SMS. All SMS messages begin with &#x60;read&#x3D;false&#x60;. An SMS is marked &#x60;read&#x3D;true&#x60; when an &#x60;SMS&#x60; has been returned to the user at least once. For example you have called &#x60;getSms&#x60; or &#x60;waitForSms&#x60; etc., or you have viewed the SMS in the dashboard..</param>
        /// <param name="countType">How result size should be compared with the expected size. Exactly or at-least matching result?.</param>
        /// <param name="matches">Conditions that should be matched for an SMS to qualify for results. Each condition will be applied in order to each SMS within a phone number to filter a result list of matching SMSs you are waiting for..</param>
        /// <param name="sortDirection">Direction to sort matching SMSs by created time.</param>
        /// <param name="since">ISO Date Time earliest time of SMS to consider. Filter for matching SMSs that were received after this date.</param>
        /// <param name="before">ISO Date Time latest time of SMS to consider. Filter for matching SMSs that were received before this date.</param>
        public WaitForSmsConditions(Guid phoneNumberId = default(Guid), int? limit = default(int?), long count = default(long), long? delayTimeout = default(long?), long timeout = default(long), bool? unreadOnly = default(bool?), CountTypeEnum? countType = default(CountTypeEnum?), List<SmsMatchOption> matches = default(List<SmsMatchOption>), SortDirectionEnum? sortDirection = default(SortDirectionEnum?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?))
        {
            this.PhoneNumberId = phoneNumberId;
            this.Count = count;
            this.Timeout = timeout;
            this.Limit = limit;
            this.DelayTimeout = delayTimeout;
            this.UnreadOnly = unreadOnly;
            this.CountType = countType;
            this.Matches = matches;
            this.SortDirection = sortDirection;
            this.Since = since;
            this.Before = before;
        }

        /// <summary>
        /// ID of phone number to search within and apply conditions to. Essentially filtering the SMS found to give a count.
        /// </summary>
        /// <value>ID of phone number to search within and apply conditions to. Essentially filtering the SMS found to give a count.</value>
        [DataMember(Name = "phoneNumberId", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumberId { get; set; }

        /// <summary>
        /// Limit results
        /// </summary>
        /// <value>Limit results</value>
        [DataMember(Name = "limit", EmitDefaultValue = true)]
        public int? Limit { get; set; }

        /// <summary>
        /// Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation.
        /// </summary>
        /// <value>Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation.</value>
        [DataMember(Name = "count", IsRequired = true, EmitDefaultValue = true)]
        public long Count { get; set; }

        /// <summary>
        /// Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified.
        /// </summary>
        /// <value>Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified.</value>
        [DataMember(Name = "delayTimeout", EmitDefaultValue = true)]
        public long? DelayTimeout { get; set; }

        /// <summary>
        /// Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met.
        /// </summary>
        /// <value>Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met.</value>
        [DataMember(Name = "timeout", IsRequired = true, EmitDefaultValue = true)]
        public long Timeout { get; set; }

        /// <summary>
        /// Apply conditions only to **unread** SMS. All SMS messages begin with &#x60;read&#x3D;false&#x60;. An SMS is marked &#x60;read&#x3D;true&#x60; when an &#x60;SMS&#x60; has been returned to the user at least once. For example you have called &#x60;getSms&#x60; or &#x60;waitForSms&#x60; etc., or you have viewed the SMS in the dashboard.
        /// </summary>
        /// <value>Apply conditions only to **unread** SMS. All SMS messages begin with &#x60;read&#x3D;false&#x60;. An SMS is marked &#x60;read&#x3D;true&#x60; when an &#x60;SMS&#x60; has been returned to the user at least once. For example you have called &#x60;getSms&#x60; or &#x60;waitForSms&#x60; etc., or you have viewed the SMS in the dashboard.</value>
        [DataMember(Name = "unreadOnly", EmitDefaultValue = true)]
        public bool? UnreadOnly { get; set; }

        /// <summary>
        /// Conditions that should be matched for an SMS to qualify for results. Each condition will be applied in order to each SMS within a phone number to filter a result list of matching SMSs you are waiting for.
        /// </summary>
        /// <value>Conditions that should be matched for an SMS to qualify for results. Each condition will be applied in order to each SMS within a phone number to filter a result list of matching SMSs you are waiting for.</value>
        [DataMember(Name = "matches", EmitDefaultValue = true)]
        public List<SmsMatchOption> Matches { get; set; }

        /// <summary>
        /// ISO Date Time earliest time of SMS to consider. Filter for matching SMSs that were received after this date
        /// </summary>
        /// <value>ISO Date Time earliest time of SMS to consider. Filter for matching SMSs that were received after this date</value>
        [DataMember(Name = "since", EmitDefaultValue = true)]
        public DateTime? Since { get; set; }

        /// <summary>
        /// ISO Date Time latest time of SMS to consider. Filter for matching SMSs that were received before this date
        /// </summary>
        /// <value>ISO Date Time latest time of SMS to consider. Filter for matching SMSs that were received before this date</value>
        [DataMember(Name = "before", EmitDefaultValue = true)]
        public DateTime? Before { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WaitForSmsConditions {\n");
            sb.Append("  PhoneNumberId: ").Append(PhoneNumberId).Append("\n");
            sb.Append("  Limit: ").Append(Limit).Append("\n");
            sb.Append("  Count: ").Append(Count).Append("\n");
            sb.Append("  DelayTimeout: ").Append(DelayTimeout).Append("\n");
            sb.Append("  Timeout: ").Append(Timeout).Append("\n");
            sb.Append("  UnreadOnly: ").Append(UnreadOnly).Append("\n");
            sb.Append("  CountType: ").Append(CountType).Append("\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("  SortDirection: ").Append(SortDirection).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WaitForSmsConditions);
        }

        /// <summary>
        /// Returns true if WaitForSmsConditions instances are equal
        /// </summary>
        /// <param name="input">Instance of WaitForSmsConditions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WaitForSmsConditions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.PhoneNumberId == input.PhoneNumberId ||
                    (this.PhoneNumberId != null &&
                    this.PhoneNumberId.Equals(input.PhoneNumberId))
                ) && 
                (
                    this.Limit == input.Limit ||
                    (this.Limit != null &&
                    this.Limit.Equals(input.Limit))
                ) && 
                (
                    this.Count == input.Count ||
                    this.Count.Equals(input.Count)
                ) && 
                (
                    this.DelayTimeout == input.DelayTimeout ||
                    (this.DelayTimeout != null &&
                    this.DelayTimeout.Equals(input.DelayTimeout))
                ) && 
                (
                    this.Timeout == input.Timeout ||
                    this.Timeout.Equals(input.Timeout)
                ) && 
                (
                    this.UnreadOnly == input.UnreadOnly ||
                    (this.UnreadOnly != null &&
                    this.UnreadOnly.Equals(input.UnreadOnly))
                ) && 
                (
                    this.CountType == input.CountType ||
                    this.CountType.Equals(input.CountType)
                ) && 
                (
                    this.Matches == input.Matches ||
                    this.Matches != null &&
                    input.Matches != null &&
                    this.Matches.SequenceEqual(input.Matches)
                ) && 
                (
                    this.SortDirection == input.SortDirection ||
                    this.SortDirection.Equals(input.SortDirection)
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.PhoneNumberId != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumberId.GetHashCode();
                }
                if (this.Limit != null)
                {
                    hashCode = (hashCode * 59) + this.Limit.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Count.GetHashCode();
                if (this.DelayTimeout != null)
                {
                    hashCode = (hashCode * 59) + this.DelayTimeout.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Timeout.GetHashCode();
                if (this.UnreadOnly != null)
                {
                    hashCode = (hashCode * 59) + this.UnreadOnly.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.CountType.GetHashCode();
                if (this.Matches != null)
                {
                    hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SortDirection.GetHashCode();
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WaitForSingleSmsOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// WaitForSingleSmsOptions
    /// </summary>
    [DataContract(Name = "WaitForSingleSmsOptions")]
    public partial class WaitForSingleSmsOptions : IEquatable<WaitForSingleSmsOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines SortDirection
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SortDirectionEnum
        {
            /// <summary>
            /// Enum ASC for value: ASC
            /// </summary>
            [EnumMember(Value = "ASC")]
            ASC = 1,

            /// <summary>
            /// Enum DESC for value: DESC
            /// </summary>
            [EnumMember(Value = "DESC")]
            DESC = 2

        }


        /// <summary>
        /// Gets or Sets SortDirection
        /// </summary>
        [DataMember(Name = "sortDirection", EmitDefaultValue = false)]
        public SortDirectionEnum? SortDirection { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForSingleSmsOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WaitForSingleSmsOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForSingleSmsOptions" /> class.
        /// </summary>
        /// <param name="phoneNumberId">phoneNumberId (required).</param>
        /// <param name="timeout">timeout (required).</param>
        /// <param name="unreadOnly">unreadOnly.</param>
        /// <param name="before">before.</param>
        /// <param name="since">since.</param>
        /// <param name="sortDirection">sortDirection.</param>
        /// <param name="delay">delay.</param>
        public WaitForSingleSmsOptions(Guid phoneNumberId = default(Guid), long timeout = default(long), bool unreadOnly = default(bool), DateTime before = default(DateTime), DateTime since = default(DateTime), SortDirectionEnum? sortDirection = default(SortDirectionEnum?), long delay = default(long))
        {
            this.PhoneNumberId = phoneNumberId;
            this.Timeout = timeout;
            this.UnreadOnly = unreadOnly;
            this.Before = before;
            this.Since = since;
            this.SortDirection = sortDirection;
            this.Delay = delay;
        }

        /// <summary>
        /// Gets or Sets PhoneNumberId
        /// </summary>
        [DataMember(Name = "phoneNumberId", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumberId { get; set; }

        /// <summary>
        /// Gets or Sets Timeout
        /// </summary>
        [DataMember(Name = "timeout", IsRequired = true, EmitDefaultValue = true)]
        public long Timeout { get; set; }

        /// <summary>
        /// Gets or Sets UnreadOnly
        /// </summary>
        [DataMember(Name = "unreadOnly", EmitDefaultValue = true)]
        public bool UnreadOnly { get; set; }

        /// <summary>
        /// Gets or Sets Before
        /// </summary>
        [DataMember(Name = "before", EmitDefaultValue = false)]
        public DateTime Before { get; set; }

        /// <summary>
        /// Gets or Sets Since
        /// </summary>
        [DataMember(Name = "since", EmitDefaultValue = false)]
        public DateTime Since { get; set; }

        /// <summary>
        /// Gets or Sets Delay
        /// </summary>
        [DataMember(Name = "delay", EmitDefaultValue = false)]
        public long Delay { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WaitForSingleSmsOptions {\n");
            sb.Append("  PhoneNumberId: ").Append(PhoneNumberId).Append("\n");
            sb.Append("  Timeout: ").Append(Timeout).Append("\n");
            sb.Append("  UnreadOnly: ").Append(UnreadOnly).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  SortDirection: ").Append(SortDirection).Append("\n");
            sb.Append("  Delay: ").Append(Delay).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WaitForSingleSmsOptions);
        }

        /// <summary>
        /// Returns true if WaitForSingleSmsOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of WaitForSingleSmsOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WaitForSingleSmsOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.PhoneNumberId == input.PhoneNumberId ||
                    (this.PhoneNumberId != null &&
                    this.PhoneNumberId.Equals(input.PhoneNumberId))
                ) && 
                (
                    this.Timeout == input.Timeout ||
                    this.Timeout.Equals(input.Timeout)
                ) && 
                (
                    this.UnreadOnly == input.UnreadOnly ||
                    this.UnreadOnly.Equals(input.UnreadOnly)
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.SortDirection == input.SortDirection ||
                    this.SortDirection.Equals(input.SortDirection)
                ) && 
                (
                    this.Delay == input.Delay ||
                    this.Delay.Equals(input.Delay)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.PhoneNumberId != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumberId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Timeout.GetHashCode();
                hashCode = (hashCode * 59) + this.UnreadOnly.GetHashCode();
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SortDirection.GetHashCode();
                hashCode = (hashCode * 59) + this.Delay.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/WaitForConditions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Conditions to apply to emails that you are waiting for
    /// </summary>
    [DataContract(Name = "WaitForConditions")]
    public partial class WaitForConditions : IEquatable<WaitForConditions>, IValidatableObject
    {
        /// <summary>
        /// How result size should be compared with the expected size. Exactly or at-least matching result?
        /// </summary>
        /// <value>How result size should be compared with the expected size. Exactly or at-least matching result?</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum CountTypeEnum
        {
            /// <summary>
            /// Enum EXACTLY for value: EXACTLY
            /// </summary>
            [EnumMember(Value = "EXACTLY")]
            EXACTLY = 1,

            /// <summary>
            /// Enum ATLEAST for value: ATLEAST
            /// </summary>
            [EnumMember(Value = "ATLEAST")]
            ATLEAST = 2

        }


        /// <summary>
        /// How result size should be compared with the expected size. Exactly or at-least matching result?
        /// </summary>
        /// <value>How result size should be compared with the expected size. Exactly or at-least matching result?</value>
        [DataMember(Name = "countType", EmitDefaultValue = true)]
        public CountTypeEnum? CountType { get; set; }
        /// <summary>
        /// Direction to sort matching emails by created time
        /// </summary>
        /// <value>Direction to sort matching emails by created time</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SortDirectionEnum
        {
            /// <summary>
            /// Enum ASC for value: ASC
            /// </summary>
            [EnumMember(Value = "ASC")]
            ASC = 1,

            /// <summary>
            /// Enum DESC for value: DESC
            /// </summary>
            [EnumMember(Value = "DESC")]
            DESC = 2

        }


        /// <summary>
        /// Direction to sort matching emails by created time
        /// </summary>
        /// <value>Direction to sort matching emails by created time</value>
        [DataMember(Name = "sortDirection", EmitDefaultValue = true)]
        public SortDirectionEnum? SortDirection { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForConditions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected WaitForConditions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForConditions" /> class.
        /// </summary>
        /// <param name="inboxId">ID of inbox to search within and apply conditions to. Essentially filtering the emails found to give a count. (required).</param>
        /// <param name="count">Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation..</param>
        /// <param name="delayTimeout">Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified..</param>
        /// <param name="timeout">Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met. (required).</param>
        /// <param name="unreadOnly">Apply conditions only to **unread** emails. All emails begin with &#x60;read&#x3D;false&#x60;. An email is marked &#x60;read&#x3D;true&#x60; when an &#x60;EmailDto&#x60; representation of it has been returned to the user at least once. For example you have called &#x60;getEmail&#x60; or &#x60;waitForLatestEmail&#x60; etc., or you have viewed the email in the dashboard..</param>
        /// <param name="countType">How result size should be compared with the expected size. Exactly or at-least matching result?.</param>
        /// <param name="matches">Conditions that should be matched for an email to qualify for results. Each condition will be applied in order to each email within an inbox to filter a result list of matching emails you are waiting for..</param>
        /// <param name="sortDirection">Direction to sort matching emails by created time.</param>
        /// <param name="since">ISO Date Time earliest time of email to consider. Filter for matching emails that were received after this date.</param>
        /// <param name="before">ISO Date Time latest time of email to consider. Filter for matching emails that were received before this date.</param>
        public WaitForConditions(Guid inboxId = default(Guid), int? count = default(int?), long? delayTimeout = default(long?), long timeout = default(long), bool? unreadOnly = default(bool?), CountTypeEnum? countType = default(CountTypeEnum?), List<MatchOption> matches = default(List<MatchOption>), SortDirectionEnum? sortDirection = default(SortDirectionEnum?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?))
        {
            this.InboxId = inboxId;
            this.Timeout = timeout;
            this.Count = count;
            this.DelayTimeout = delayTimeout;
            this.UnreadOnly = unreadOnly;
            this.CountType = countType;
            this.Matches = matches;
            this.SortDirection = sortDirection;
            this.Since = since;
            this.Before = before;
        }

        /// <summary>
        /// ID of inbox to search within and apply conditions to. Essentially filtering the emails found to give a count.
        /// </summary>
        /// <value>ID of inbox to search within and apply conditions to. Essentially filtering the emails found to give a count.</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation.
        /// </summary>
        /// <value>Number of results that should match conditions. Either exactly or at least this amount based on the &#x60;countType&#x60;. If count condition is not met and the timeout has not been reached the &#x60;waitFor&#x60; method will retry the operation.</value>
        [DataMember(Name = "count", EmitDefaultValue = true)]
        public int? Count { get; set; }

        /// <summary>
        /// Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified.
        /// </summary>
        /// <value>Max time in milliseconds to wait between retries if a &#x60;timeout&#x60; is specified.</value>
        [DataMember(Name = "delayTimeout", EmitDefaultValue = true)]
        public long? DelayTimeout { get; set; }

        /// <summary>
        /// Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met.
        /// </summary>
        /// <value>Max time in milliseconds to retry the &#x60;waitFor&#x60; operation until conditions are met.</value>
        [DataMember(Name = "timeout", IsRequired = true, EmitDefaultValue = true)]
        public long Timeout { get; set; }

        /// <summary>
        /// Apply conditions only to **unread** emails. All emails begin with &#x60;read&#x3D;false&#x60;. An email is marked &#x60;read&#x3D;true&#x60; when an &#x60;EmailDto&#x60; representation of it has been returned to the user at least once. For example you have called &#x60;getEmail&#x60; or &#x60;waitForLatestEmail&#x60; etc., or you have viewed the email in the dashboard.
        /// </summary>
        /// <value>Apply conditions only to **unread** emails. All emails begin with &#x60;read&#x3D;false&#x60;. An email is marked &#x60;read&#x3D;true&#x60; when an &#x60;EmailDto&#x60; representation of it has been returned to the user at least once. For example you have called &#x60;getEmail&#x60; or &#x60;waitForLatestEmail&#x60; etc., or you have viewed the email in the dashboard.</value>
        [DataMember(Name = "unreadOnly", EmitDefaultValue = true)]
        public bool? UnreadOnly { get; set; }

        /// <summary>
        /// Conditions that should be matched for an email to qualify for results. Each condition will be applied in order to each email within an inbox to filter a result list of matching emails you are waiting for.
        /// </summary>
        /// <value>Conditions that should be matched for an email to qualify for results. Each condition will be applied in order to each email within an inbox to filter a result list of matching emails you are waiting for.</value>
        [DataMember(Name = "matches", EmitDefaultValue = true)]
        public List<MatchOption> Matches { get; set; }

        /// <summary>
        /// ISO Date Time earliest time of email to consider. Filter for matching emails that were received after this date
        /// </summary>
        /// <value>ISO Date Time earliest time of email to consider. Filter for matching emails that were received after this date</value>
        [DataMember(Name = "since", EmitDefaultValue = true)]
        public DateTime? Since { get; set; }

        /// <summary>
        /// ISO Date Time latest time of email to consider. Filter for matching emails that were received before this date
        /// </summary>
        /// <value>ISO Date Time latest time of email to consider. Filter for matching emails that were received before this date</value>
        [DataMember(Name = "before", EmitDefaultValue = true)]
        public DateTime? Before { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class WaitForConditions {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Count: ").Append(Count).Append("\n");
            sb.Append("  DelayTimeout: ").Append(DelayTimeout).Append("\n");
            sb.Append("  Timeout: ").Append(Timeout).Append("\n");
            sb.Append("  UnreadOnly: ").Append(UnreadOnly).Append("\n");
            sb.Append("  CountType: ").Append(CountType).Append("\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("  SortDirection: ").Append(SortDirection).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as WaitForConditions);
        }

        /// <summary>
        /// Returns true if WaitForConditions instances are equal
        /// </summary>
        /// <param name="input">Instance of WaitForConditions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(WaitForConditions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Count == input.Count ||
                    (this.Count != null &&
                    this.Count.Equals(input.Count))
                ) && 
                (
                    this.DelayTimeout == input.DelayTimeout ||
                    (this.DelayTimeout != null &&
                    this.DelayTimeout.Equals(input.DelayTimeout))
                ) && 
                (
                    this.Timeout == input.Timeout ||
                    this.Timeout.Equals(input.Timeout)
                ) && 
                (
                    this.UnreadOnly == input.UnreadOnly ||
                    (this.UnreadOnly != null &&
                    this.UnreadOnly.Equals(input.UnreadOnly))
                ) && 
                (
                    this.CountType == input.CountType ||
                    this.CountType.Equals(input.CountType)
                ) && 
                (
                    this.Matches == input.Matches ||
                    this.Matches != null &&
                    input.Matches != null &&
                    this.Matches.SequenceEqual(input.Matches)
                ) && 
                (
                    this.SortDirection == input.SortDirection ||
                    this.SortDirection.Equals(input.SortDirection)
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Count != null)
                {
                    hashCode = (hashCode * 59) + this.Count.GetHashCode();
                }
                if (this.DelayTimeout != null)
                {
                    hashCode = (hashCode * 59) + this.DelayTimeout.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Timeout.GetHashCode();
                if (this.UnreadOnly != null)
                {
                    hashCode = (hashCode * 59) + this.UnreadOnly.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.CountType.GetHashCode();
                if (this.Matches != null)
                {
                    hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SortDirection.GetHashCode();
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/VerifyWebhookSignatureResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// VerifyWebhookSignatureResults
    /// </summary>
    [DataContract(Name = "VerifyWebhookSignatureResults")]
    public partial class VerifyWebhookSignatureResults : IEquatable<VerifyWebhookSignatureResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyWebhookSignatureResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected VerifyWebhookSignatureResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyWebhookSignatureResults" /> class.
        /// </summary>
        /// <param name="isValid">isValid (required).</param>
        public VerifyWebhookSignatureResults(bool isValid = default(bool))
        {
            this.IsValid = isValid;
        }

        /// <summary>
        /// Gets or Sets IsValid
        /// </summary>
        [DataMember(Name = "isValid", IsRequired = true, EmitDefaultValue = true)]
        public bool IsValid { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class VerifyWebhookSignatureResults {\n");
            sb.Append("  IsValid: ").Append(IsValid).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as VerifyWebhookSignatureResults);
        }

        /// <summary>
        /// Returns true if VerifyWebhookSignatureResults instances are equal
        /// </summary>
        /// <param name="input">Instance of VerifyWebhookSignatureResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(VerifyWebhookSignatureResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.IsValid == input.IsValid ||
                    this.IsValid.Equals(input.IsValid)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.IsValid.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/VerifyWebhookSignatureOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// VerifyWebhookSignatureOptions
    /// </summary>
    [DataContract(Name = "VerifyWebhookSignatureOptions")]
    public partial class VerifyWebhookSignatureOptions : IEquatable<VerifyWebhookSignatureOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyWebhookSignatureOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected VerifyWebhookSignatureOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyWebhookSignatureOptions" /> class.
        /// </summary>
        /// <param name="messageId">messageId (required).</param>
        /// <param name="signature">signature (required).</param>
        public VerifyWebhookSignatureOptions(string messageId = default(string), string signature = default(string))
        {
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for VerifyWebhookSignatureOptions and cannot be null");
            }
            this.MessageId = messageId;
            // to ensure "signature" is required (not null)
            if (signature == null)
            {
                throw new ArgumentNullException("signature is a required property for VerifyWebhookSignatureOptions and cannot be null");
            }
            this.Signature = signature;
        }

        /// <summary>
        /// Gets or Sets MessageId
        /// </summary>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// Gets or Sets Signature
        /// </summary>
        [DataMember(Name = "signature", IsRequired = true, EmitDefaultValue = true)]
        public string Signature { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class VerifyWebhookSignatureOptions {\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  Signature: ").Append(Signature).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as VerifyWebhookSignatureOptions);
        }

        /// <summary>
        /// Returns true if VerifyWebhookSignatureOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of VerifyWebhookSignatureOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(VerifyWebhookSignatureOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.Signature == input.Signature ||
                    (this.Signature != null &&
                    this.Signature.Equals(input.Signature))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.Signature != null)
                {
                    hashCode = (hashCode * 59) + this.Signature.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/VerifyEmailAddressOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for verifying that an email address exists at a remote mail server.
    /// </summary>
    [DataContract(Name = "VerifyEmailAddressOptions")]
    public partial class VerifyEmailAddressOptions : IEquatable<VerifyEmailAddressOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyEmailAddressOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected VerifyEmailAddressOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="VerifyEmailAddressOptions" /> class.
        /// </summary>
        /// <param name="mailServerDomain">mailServerDomain.</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="senderEmailAddress">senderEmailAddress.</param>
        /// <param name="port">port.</param>
        public VerifyEmailAddressOptions(string mailServerDomain = default(string), string emailAddress = default(string), string senderEmailAddress = default(string), int? port = default(int?))
        {
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for VerifyEmailAddressOptions and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.MailServerDomain = mailServerDomain;
            this.SenderEmailAddress = senderEmailAddress;
            this.Port = port;
        }

        /// <summary>
        /// Gets or Sets MailServerDomain
        /// </summary>
        [DataMember(Name = "mailServerDomain", EmitDefaultValue = true)]
        public string MailServerDomain { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets SenderEmailAddress
        /// </summary>
        [DataMember(Name = "senderEmailAddress", EmitDefaultValue = true)]
        public string SenderEmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Port
        /// </summary>
        [DataMember(Name = "port", EmitDefaultValue = true)]
        public int? Port { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class VerifyEmailAddressOptions {\n");
            sb.Append("  MailServerDomain: ").Append(MailServerDomain).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  SenderEmailAddress: ").Append(SenderEmailAddress).Append("\n");
            sb.Append("  Port: ").Append(Port).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as VerifyEmailAddressOptions);
        }

        /// <summary>
        /// Returns true if VerifyEmailAddressOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of VerifyEmailAddressOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(VerifyEmailAddressOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MailServerDomain == input.MailServerDomain ||
                    (this.MailServerDomain != null &&
                    this.MailServerDomain.Equals(input.MailServerDomain))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.SenderEmailAddress == input.SenderEmailAddress ||
                    (this.SenderEmailAddress != null &&
                    this.SenderEmailAddress.Equals(input.SenderEmailAddress))
                ) && 
                (
                    this.Port == input.Port ||
                    (this.Port != null &&
                    this.Port.Equals(input.Port))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MailServerDomain != null)
                {
                    hashCode = (hashCode * 59) + this.MailServerDomain.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.SenderEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.SenderEmailAddress.GetHashCode();
                }
                if (this.Port != null)
                {
                    hashCode = (hashCode * 59) + this.Port.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ValidationMessage.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Optional warnings resulting from HTML validation
    /// </summary>
    [DataContract(Name = "ValidationMessage")]
    public partial class ValidationMessage : IEquatable<ValidationMessage>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidationMessage" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ValidationMessage() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidationMessage" /> class.
        /// </summary>
        /// <param name="lineNumber">lineNumber (required).</param>
        /// <param name="message">message.</param>
        public ValidationMessage(int lineNumber = default(int), string message = default(string))
        {
            this.LineNumber = lineNumber;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets LineNumber
        /// </summary>
        [DataMember(Name = "lineNumber", IsRequired = true, EmitDefaultValue = true)]
        public int LineNumber { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ValidationMessage {\n");
            sb.Append("  LineNumber: ").Append(LineNumber).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ValidationMessage);
        }

        /// <summary>
        /// Returns true if ValidationMessage instances are equal
        /// </summary>
        /// <param name="input">Instance of ValidationMessage to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ValidationMessage input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.LineNumber == input.LineNumber ||
                    this.LineNumber.Equals(input.LineNumber)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.LineNumber.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ValidationDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Response object for email validation operation
    /// </summary>
    [DataContract(Name = "ValidationDto")]
    public partial class ValidationDto : IEquatable<ValidationDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidationDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ValidationDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidationDto" /> class.
        /// </summary>
        /// <param name="emailId">ID of the email validated (required).</param>
        /// <param name="html">html (required).</param>
        public ValidationDto(Guid emailId = default(Guid), HTMLValidationResult html = default(HTMLValidationResult))
        {
            this.EmailId = emailId;
            // to ensure "html" is required (not null)
            if (html == null)
            {
                throw new ArgumentNullException("html is a required property for ValidationDto and cannot be null");
            }
            this.Html = html;
        }

        /// <summary>
        /// ID of the email validated
        /// </summary>
        /// <value>ID of the email validated</value>
        [DataMember(Name = "emailId", IsRequired = true, EmitDefaultValue = true)]
        public Guid EmailId { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", IsRequired = true, EmitDefaultValue = true)]
        public HTMLValidationResult Html { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ValidationDto {\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ValidationDto);
        }

        /// <summary>
        /// Returns true if ValidationDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ValidationDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ValidationDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.Html == input.Html ||
                    (this.Html != null &&
                    this.Html.Equals(input.Html))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.Html != null)
                {
                    hashCode = (hashCode * 59) + this.Html.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ValidateEmailAddressListResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of validating a list of email addresses
    /// </summary>
    [DataContract(Name = "ValidateEmailAddressListResult")]
    public partial class ValidateEmailAddressListResult : IEquatable<ValidateEmailAddressListResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidateEmailAddressListResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ValidateEmailAddressListResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidateEmailAddressListResult" /> class.
        /// </summary>
        /// <param name="validEmailAddresses">validEmailAddresses (required).</param>
        /// <param name="invalidEmailAddresses">invalidEmailAddresses (required).</param>
        /// <param name="resultMapEmailAddressIsValid">resultMapEmailAddressIsValid (required).</param>
        public ValidateEmailAddressListResult(List<string> validEmailAddresses = default(List<string>), List<string> invalidEmailAddresses = default(List<string>), Dictionary<string, bool> resultMapEmailAddressIsValid = default(Dictionary<string, bool>))
        {
            // to ensure "validEmailAddresses" is required (not null)
            if (validEmailAddresses == null)
            {
                throw new ArgumentNullException("validEmailAddresses is a required property for ValidateEmailAddressListResult and cannot be null");
            }
            this.ValidEmailAddresses = validEmailAddresses;
            // to ensure "invalidEmailAddresses" is required (not null)
            if (invalidEmailAddresses == null)
            {
                throw new ArgumentNullException("invalidEmailAddresses is a required property for ValidateEmailAddressListResult and cannot be null");
            }
            this.InvalidEmailAddresses = invalidEmailAddresses;
            // to ensure "resultMapEmailAddressIsValid" is required (not null)
            if (resultMapEmailAddressIsValid == null)
            {
                throw new ArgumentNullException("resultMapEmailAddressIsValid is a required property for ValidateEmailAddressListResult and cannot be null");
            }
            this.ResultMapEmailAddressIsValid = resultMapEmailAddressIsValid;
        }

        /// <summary>
        /// Gets or Sets ValidEmailAddresses
        /// </summary>
        [DataMember(Name = "validEmailAddresses", IsRequired = true, EmitDefaultValue = true)]
        public List<string> ValidEmailAddresses { get; set; }

        /// <summary>
        /// Gets or Sets InvalidEmailAddresses
        /// </summary>
        [DataMember(Name = "invalidEmailAddresses", IsRequired = true, EmitDefaultValue = true)]
        public List<string> InvalidEmailAddresses { get; set; }

        /// <summary>
        /// Gets or Sets ResultMapEmailAddressIsValid
        /// </summary>
        [DataMember(Name = "resultMapEmailAddressIsValid", IsRequired = true, EmitDefaultValue = true)]
        public Dictionary<string, bool> ResultMapEmailAddressIsValid { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ValidateEmailAddressListResult {\n");
            sb.Append("  ValidEmailAddresses: ").Append(ValidEmailAddresses).Append("\n");
            sb.Append("  InvalidEmailAddresses: ").Append(InvalidEmailAddresses).Append("\n");
            sb.Append("  ResultMapEmailAddressIsValid: ").Append(ResultMapEmailAddressIsValid).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ValidateEmailAddressListResult);
        }

        /// <summary>
        /// Returns true if ValidateEmailAddressListResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ValidateEmailAddressListResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ValidateEmailAddressListResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ValidEmailAddresses == input.ValidEmailAddresses ||
                    this.ValidEmailAddresses != null &&
                    input.ValidEmailAddresses != null &&
                    this.ValidEmailAddresses.SequenceEqual(input.ValidEmailAddresses)
                ) && 
                (
                    this.InvalidEmailAddresses == input.InvalidEmailAddresses ||
                    this.InvalidEmailAddresses != null &&
                    input.InvalidEmailAddresses != null &&
                    this.InvalidEmailAddresses.SequenceEqual(input.InvalidEmailAddresses)
                ) && 
                (
                    this.ResultMapEmailAddressIsValid == input.ResultMapEmailAddressIsValid ||
                    this.ResultMapEmailAddressIsValid != null &&
                    input.ResultMapEmailAddressIsValid != null &&
                    this.ResultMapEmailAddressIsValid.SequenceEqual(input.ResultMapEmailAddressIsValid)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ValidEmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.ValidEmailAddresses.GetHashCode();
                }
                if (this.InvalidEmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.InvalidEmailAddresses.GetHashCode();
                }
                if (this.ResultMapEmailAddressIsValid != null)
                {
                    hashCode = (hashCode * 59) + this.ResultMapEmailAddressIsValid.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ValidateEmailAddressListOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for validating a list of email addresses
    /// </summary>
    [DataContract(Name = "ValidateEmailAddressListOptions")]
    public partial class ValidateEmailAddressListOptions : IEquatable<ValidateEmailAddressListOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidateEmailAddressListOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ValidateEmailAddressListOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ValidateEmailAddressListOptions" /> class.
        /// </summary>
        /// <param name="emailAddressList">emailAddressList (required).</param>
        /// <param name="ignoreOldResults">ignoreOldResults.</param>
        public ValidateEmailAddressListOptions(List<string> emailAddressList = default(List<string>), bool? ignoreOldResults = default(bool?))
        {
            // to ensure "emailAddressList" is required (not null)
            if (emailAddressList == null)
            {
                throw new ArgumentNullException("emailAddressList is a required property for ValidateEmailAddressListOptions and cannot be null");
            }
            this.EmailAddressList = emailAddressList;
            this.IgnoreOldResults = ignoreOldResults;
        }

        /// <summary>
        /// Gets or Sets EmailAddressList
        /// </summary>
        [DataMember(Name = "emailAddressList", IsRequired = true, EmitDefaultValue = true)]
        public List<string> EmailAddressList { get; set; }

        /// <summary>
        /// Gets or Sets IgnoreOldResults
        /// </summary>
        [DataMember(Name = "ignoreOldResults", EmitDefaultValue = true)]
        public bool? IgnoreOldResults { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ValidateEmailAddressListOptions {\n");
            sb.Append("  EmailAddressList: ").Append(EmailAddressList).Append("\n");
            sb.Append("  IgnoreOldResults: ").Append(IgnoreOldResults).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ValidateEmailAddressListOptions);
        }

        /// <summary>
        /// Returns true if ValidateEmailAddressListOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ValidateEmailAddressListOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ValidateEmailAddressListOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailAddressList == input.EmailAddressList ||
                    this.EmailAddressList != null &&
                    input.EmailAddressList != null &&
                    this.EmailAddressList.SequenceEqual(input.EmailAddressList)
                ) && 
                (
                    this.IgnoreOldResults == input.IgnoreOldResults ||
                    (this.IgnoreOldResults != null &&
                    this.IgnoreOldResults.Equals(input.IgnoreOldResults))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailAddressList != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddressList.GetHashCode();
                }
                if (this.IgnoreOldResults != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreOldResults.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UserInfoDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// UserInfoDto
    /// </summary>
    [DataContract(Name = "UserInfoDto")]
    public partial class UserInfoDto : IEquatable<UserInfoDto>, IValidatableObject
    {
        /// <summary>
        /// Defines AccountState
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountStateEnum
        {
            /// <summary>
            /// Enum FROZEN for value: FROZEN
            /// </summary>
            [EnumMember(Value = "FROZEN")]
            FROZEN = 1,

            /// <summary>
            /// Enum ACTIVE for value: ACTIVE
            /// </summary>
            [EnumMember(Value = "ACTIVE")]
            ACTIVE = 2

        }


        /// <summary>
        /// Gets or Sets AccountState
        /// </summary>
        [DataMember(Name = "accountState", IsRequired = true, EmitDefaultValue = true)]
        public AccountStateEnum AccountState { get; set; }
        /// <summary>
        /// Defines SubscriptionType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SubscriptionTypeEnum
        {
            /// <summary>
            /// Enum PROMONTHLY for value: PRO_MONTHLY
            /// </summary>
            [EnumMember(Value = "PRO_MONTHLY")]
            PROMONTHLY = 1,

            /// <summary>
            /// Enum STARTER for value: STARTER
            /// </summary>
            [EnumMember(Value = "STARTER")]
            STARTER = 2,

            /// <summary>
            /// Enum PRO for value: PRO
            /// </summary>
            [EnumMember(Value = "PRO")]
            PRO = 3,

            /// <summary>
            /// Enum TEAM for value: TEAM
            /// </summary>
            [EnumMember(Value = "TEAM")]
            TEAM = 4,

            /// <summary>
            /// Enum ENTERPRISE for value: ENTERPRISE
            /// </summary>
            [EnumMember(Value = "ENTERPRISE")]
            ENTERPRISE = 5

        }


        /// <summary>
        /// Gets or Sets SubscriptionType
        /// </summary>
        [DataMember(Name = "subscriptionType", EmitDefaultValue = false)]
        public SubscriptionTypeEnum? SubscriptionType { get; set; }
        /// <summary>
        /// Defines AccountType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountTypeEnum
        {
            /// <summary>
            /// Enum SOLO for value: SOLO
            /// </summary>
            [EnumMember(Value = "SOLO")]
            SOLO = 1,

            /// <summary>
            /// Enum CHILDSOLO for value: CHILD_SOLO
            /// </summary>
            [EnumMember(Value = "CHILD_SOLO")]
            CHILDSOLO = 2,

            /// <summary>
            /// Enum CHILDTEAM for value: CHILD_TEAM
            /// </summary>
            [EnumMember(Value = "CHILD_TEAM")]
            CHILDTEAM = 3,

            /// <summary>
            /// Enum CHILDADMIN for value: CHILD_ADMIN
            /// </summary>
            [EnumMember(Value = "CHILD_ADMIN")]
            CHILDADMIN = 4

        }


        /// <summary>
        /// Gets or Sets AccountType
        /// </summary>
        [DataMember(Name = "accountType", IsRequired = true, EmitDefaultValue = true)]
        public AccountTypeEnum AccountType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="UserInfoDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UserInfoDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UserInfoDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="accountState">accountState (required).</param>
        /// <param name="subscriptionType">subscriptionType.</param>
        /// <param name="accountType">accountType (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public UserInfoDto(Guid id = default(Guid), string emailAddress = default(string), AccountStateEnum accountState = default(AccountStateEnum), SubscriptionTypeEnum? subscriptionType = default(SubscriptionTypeEnum?), AccountTypeEnum accountType = default(AccountTypeEnum), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for UserInfoDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.AccountState = accountState;
            this.AccountType = accountType;
            this.CreatedAt = createdAt;
            this.SubscriptionType = subscriptionType;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UserInfoDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  AccountState: ").Append(AccountState).Append("\n");
            sb.Append("  SubscriptionType: ").Append(SubscriptionType).Append("\n");
            sb.Append("  AccountType: ").Append(AccountType).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UserInfoDto);
        }

        /// <summary>
        /// Returns true if UserInfoDto instances are equal
        /// </summary>
        /// <param name="input">Instance of UserInfoDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UserInfoDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.AccountState == input.AccountState ||
                    this.AccountState.Equals(input.AccountState)
                ) && 
                (
                    this.SubscriptionType == input.SubscriptionType ||
                    this.SubscriptionType.Equals(input.SubscriptionType)
                ) && 
                (
                    this.AccountType == input.AccountType ||
                    this.AccountType.Equals(input.AccountType)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.AccountState.GetHashCode();
                hashCode = (hashCode * 59) + this.SubscriptionType.GetHashCode();
                hashCode = (hashCode * 59) + this.AccountType.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UploadMultipartFormRequest.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// UploadMultipartFormRequest
    /// </summary>
    [DataContract(Name = "uploadMultipartForm_request")]
    public partial class UploadMultipartFormRequest : IEquatable<UploadMultipartFormRequest>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UploadMultipartFormRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UploadMultipartFormRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UploadMultipartFormRequest" /> class.
        /// </summary>
        /// <param name="contentTypeHeader">Optional content type header of attachment.</param>
        /// <param name="file">file (required).</param>
        public UploadMultipartFormRequest(string contentTypeHeader = default(string), System.IO.Stream file = default(System.IO.Stream))
        {
            // to ensure "file" is required (not null)
            if (file == null)
            {
                throw new ArgumentNullException("file is a required property for UploadMultipartFormRequest and cannot be null");
            }
            this.File = file;
            this.ContentTypeHeader = contentTypeHeader;
        }

        /// <summary>
        /// Optional content type header of attachment
        /// </summary>
        /// <value>Optional content type header of attachment</value>
        [DataMember(Name = "contentTypeHeader", EmitDefaultValue = false)]
        public string ContentTypeHeader { get; set; }

        /// <summary>
        /// Gets or Sets File
        /// </summary>
        [DataMember(Name = "file", IsRequired = true, EmitDefaultValue = true)]
        public System.IO.Stream File { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UploadMultipartFormRequest {\n");
            sb.Append("  ContentTypeHeader: ").Append(ContentTypeHeader).Append("\n");
            sb.Append("  File: ").Append(File).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UploadMultipartFormRequest);
        }

        /// <summary>
        /// Returns true if UploadMultipartFormRequest instances are equal
        /// </summary>
        /// <param name="input">Instance of UploadMultipartFormRequest to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UploadMultipartFormRequest input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ContentTypeHeader == input.ContentTypeHeader ||
                    (this.ContentTypeHeader != null &&
                    this.ContentTypeHeader.Equals(input.ContentTypeHeader))
                ) && 
                (
                    this.File == input.File ||
                    (this.File != null &&
                    this.File.Equals(input.File))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ContentTypeHeader != null)
                {
                    hashCode = (hashCode * 59) + this.ContentTypeHeader.GetHashCode();
                }
                if (this.File != null)
                {
                    hashCode = (hashCode * 59) + this.File.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UploadAttachmentOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for uploading files for attachments. When sending emails with the API that require attachments first upload each attachment. Then use the returned attachment ID in your &#x60;SendEmailOptions&#x60; when sending an email. This way you can use attachments multiple times once they have been uploaded.
    /// </summary>
    [DataContract(Name = "UploadAttachmentOptions")]
    public partial class UploadAttachmentOptions : IEquatable<UploadAttachmentOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UploadAttachmentOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UploadAttachmentOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UploadAttachmentOptions" /> class.
        /// </summary>
        /// <param name="contentId">Optional contentId for file..</param>
        /// <param name="contentType">Optional contentType for file. For instance &#x60;application/pdf&#x60;.</param>
        /// <param name="filename">Optional filename to save upload with. Will be the name that is shown in email clients.</param>
        /// <param name="base64Contents">Base64 encoded string of file contents. Typically this means reading the bytes or string content of a file and then converting that to a base64 encoded string. For examples of how to do this see https://www.mailslurp.com/guides/base64-file-uploads/ (required).</param>
        public UploadAttachmentOptions(string contentId = default(string), string contentType = default(string), string filename = default(string), string base64Contents = default(string))
        {
            // to ensure "base64Contents" is required (not null)
            if (base64Contents == null)
            {
                throw new ArgumentNullException("base64Contents is a required property for UploadAttachmentOptions and cannot be null");
            }
            this.Base64Contents = base64Contents;
            this.ContentId = contentId;
            this.ContentType = contentType;
            this.Filename = filename;
        }

        /// <summary>
        /// Optional contentId for file.
        /// </summary>
        /// <value>Optional contentId for file.</value>
        [DataMember(Name = "contentId", EmitDefaultValue = true)]
        public string ContentId { get; set; }

        /// <summary>
        /// Optional contentType for file. For instance &#x60;application/pdf&#x60;
        /// </summary>
        /// <value>Optional contentType for file. For instance &#x60;application/pdf&#x60;</value>
        [DataMember(Name = "contentType", EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Optional filename to save upload with. Will be the name that is shown in email clients
        /// </summary>
        /// <value>Optional filename to save upload with. Will be the name that is shown in email clients</value>
        [DataMember(Name = "filename", EmitDefaultValue = true)]
        public string Filename { get; set; }

        /// <summary>
        /// Base64 encoded string of file contents. Typically this means reading the bytes or string content of a file and then converting that to a base64 encoded string. For examples of how to do this see https://www.mailslurp.com/guides/base64-file-uploads/
        /// </summary>
        /// <value>Base64 encoded string of file contents. Typically this means reading the bytes or string content of a file and then converting that to a base64 encoded string. For examples of how to do this see https://www.mailslurp.com/guides/base64-file-uploads/</value>
        [DataMember(Name = "base64Contents", IsRequired = true, EmitDefaultValue = true)]
        public string Base64Contents { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UploadAttachmentOptions {\n");
            sb.Append("  ContentId: ").Append(ContentId).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  Filename: ").Append(Filename).Append("\n");
            sb.Append("  Base64Contents: ").Append(Base64Contents).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UploadAttachmentOptions);
        }

        /// <summary>
        /// Returns true if UploadAttachmentOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UploadAttachmentOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UploadAttachmentOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ContentId == input.ContentId ||
                    (this.ContentId != null &&
                    this.ContentId.Equals(input.ContentId))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.Filename == input.Filename ||
                    (this.Filename != null &&
                    this.Filename.Equals(input.Filename))
                ) && 
                (
                    this.Base64Contents == input.Base64Contents ||
                    (this.Base64Contents != null &&
                    this.Base64Contents.Equals(input.Base64Contents))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ContentId != null)
                {
                    hashCode = (hashCode * 59) + this.ContentId.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                if (this.Filename != null)
                {
                    hashCode = (hashCode * 59) + this.Filename.GetHashCode();
                }
                if (this.Base64Contents != null)
                {
                    hashCode = (hashCode * 59) + this.Base64Contents.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateSmtpAccessOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Edit access details for inbox using SMTP
    /// </summary>
    [DataContract(Name = "UpdateSmtpAccessOptions")]
    public partial class UpdateSmtpAccessOptions : IEquatable<UpdateSmtpAccessOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateSmtpAccessOptions" /> class.
        /// </summary>
        /// <param name="smtpUsername">SMTP username for login.</param>
        /// <param name="smtpPassword">SMTP password for login.</param>
        public UpdateSmtpAccessOptions(string smtpUsername = default(string), string smtpPassword = default(string))
        {
            this.SmtpUsername = smtpUsername;
            this.SmtpPassword = smtpPassword;
        }

        /// <summary>
        /// SMTP username for login
        /// </summary>
        /// <value>SMTP username for login</value>
        [DataMember(Name = "smtpUsername", EmitDefaultValue = true)]
        public string SmtpUsername { get; set; }

        /// <summary>
        /// SMTP password for login
        /// </summary>
        /// <value>SMTP password for login</value>
        [DataMember(Name = "smtpPassword", EmitDefaultValue = true)]
        public string SmtpPassword { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateSmtpAccessOptions {\n");
            sb.Append("  SmtpUsername: ").Append(SmtpUsername).Append("\n");
            sb.Append("  SmtpPassword: ").Append(SmtpPassword).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateSmtpAccessOptions);
        }

        /// <summary>
        /// Returns true if UpdateSmtpAccessOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateSmtpAccessOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateSmtpAccessOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SmtpUsername == input.SmtpUsername ||
                    (this.SmtpUsername != null &&
                    this.SmtpUsername.Equals(input.SmtpUsername))
                ) && 
                (
                    this.SmtpPassword == input.SmtpPassword ||
                    (this.SmtpPassword != null &&
                    this.SmtpPassword.Equals(input.SmtpPassword))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpUsername.GetHashCode();
                }
                if (this.SmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpPassword.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateInboxReplierOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for updating an inbox replier
    /// </summary>
    [DataContract(Name = "UpdateInboxReplierOptions")]
    public partial class UpdateInboxReplierOptions : IEquatable<UpdateInboxReplierOptions>, IValidatableObject
    {
        /// <summary>
        /// Field to match against to trigger inbox replier for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox replier for inbound email</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum RECIPIENTS for value: RECIPIENTS
            /// </summary>
            [EnumMember(Value = "RECIPIENTS")]
            RECIPIENTS = 1,

            /// <summary>
            /// Enum SENDER for value: SENDER
            /// </summary>
            [EnumMember(Value = "SENDER")]
            SENDER = 2,

            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 3,

            /// <summary>
            /// Enum ATTACHMENTS for value: ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "ATTACHMENTS")]
            ATTACHMENTS = 4

        }


        /// <summary>
        /// Field to match against to trigger inbox replier for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox replier for inbound email</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateInboxReplierOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UpdateInboxReplierOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateInboxReplierOptions" /> class.
        /// </summary>
        /// <param name="inboxId">Inbox ID to attach replier to (required).</param>
        /// <param name="name">Name for replier.</param>
        /// <param name="field">Field to match against to trigger inbox replier for inbound email (required).</param>
        /// <param name="match">String or wildcard style match for field specified when evaluating reply rules (required).</param>
        /// <param name="replyTo">Reply-to email address when sending replying.</param>
        /// <param name="subject">Subject override when replying to email.</param>
        /// <param name="from">Send email from address.</param>
        /// <param name="charset">Email reply charset.</param>
        /// <param name="isHTML">Send HTML email.</param>
        /// <param name="ignoreReplyTo">Ignore sender replyTo when responding. Send directly to the sender if enabled..</param>
        /// <param name="body">Email body for reply.</param>
        /// <param name="templateId">ID of template to use when sending a reply.</param>
        /// <param name="templateVariables">Template variable values.</param>
        public UpdateInboxReplierOptions(Guid inboxId = default(Guid), string name = default(string), FieldEnum field = default(FieldEnum), string match = default(string), string replyTo = default(string), string subject = default(string), string from = default(string), string charset = default(string), bool? isHTML = default(bool?), bool? ignoreReplyTo = default(bool?), string body = default(string), Guid? templateId = default(Guid?), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>))
        {
            this.InboxId = inboxId;
            this.Field = field;
            // to ensure "match" is required (not null)
            if (match == null)
            {
                throw new ArgumentNullException("match is a required property for UpdateInboxReplierOptions and cannot be null");
            }
            this.Match = match;
            this.Name = name;
            this.ReplyTo = replyTo;
            this.Subject = subject;
            this.From = from;
            this.Charset = charset;
            this.IsHTML = isHTML;
            this.IgnoreReplyTo = ignoreReplyTo;
            this.Body = body;
            this.TemplateId = templateId;
            this.TemplateVariables = templateVariables;
        }

        /// <summary>
        /// Inbox ID to attach replier to
        /// </summary>
        /// <value>Inbox ID to attach replier to</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Name for replier
        /// </summary>
        /// <value>Name for replier</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// String or wildcard style match for field specified when evaluating reply rules
        /// </summary>
        /// <value>String or wildcard style match for field specified when evaluating reply rules</value>
        [DataMember(Name = "match", IsRequired = true, EmitDefaultValue = true)]
        public string Match { get; set; }

        /// <summary>
        /// Reply-to email address when sending replying
        /// </summary>
        /// <value>Reply-to email address when sending replying</value>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Subject override when replying to email
        /// </summary>
        /// <value>Subject override when replying to email</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Send email from address
        /// </summary>
        /// <value>Send email from address</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Email reply charset
        /// </summary>
        /// <value>Email reply charset</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Send HTML email
        /// </summary>
        /// <value>Send HTML email</value>
        [DataMember(Name = "isHTML", EmitDefaultValue = true)]
        public bool? IsHTML { get; set; }

        /// <summary>
        /// Ignore sender replyTo when responding. Send directly to the sender if enabled.
        /// </summary>
        /// <value>Ignore sender replyTo when responding. Send directly to the sender if enabled.</value>
        [DataMember(Name = "ignoreReplyTo", EmitDefaultValue = true)]
        public bool? IgnoreReplyTo { get; set; }

        /// <summary>
        /// Email body for reply
        /// </summary>
        /// <value>Email body for reply</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// ID of template to use when sending a reply
        /// </summary>
        /// <value>ID of template to use when sending a reply</value>
        [DataMember(Name = "templateId", EmitDefaultValue = true)]
        public Guid? TemplateId { get; set; }

        /// <summary>
        /// Template variable values
        /// </summary>
        /// <value>Template variable values</value>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateInboxReplierOptions {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Match: ").Append(Match).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  IgnoreReplyTo: ").Append(IgnoreReplyTo).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  TemplateId: ").Append(TemplateId).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateInboxReplierOptions);
        }

        /// <summary>
        /// Returns true if UpdateInboxReplierOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateInboxReplierOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateInboxReplierOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Match == input.Match ||
                    (this.Match != null &&
                    this.Match.Equals(input.Match))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    (this.IsHTML != null &&
                    this.IsHTML.Equals(input.IsHTML))
                ) && 
                (
                    this.IgnoreReplyTo == input.IgnoreReplyTo ||
                    (this.IgnoreReplyTo != null &&
                    this.IgnoreReplyTo.Equals(input.IgnoreReplyTo))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.TemplateId == input.TemplateId ||
                    (this.TemplateId != null &&
                    this.TemplateId.Equals(input.TemplateId))
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                if (this.Match != null)
                {
                    hashCode = (hashCode * 59) + this.Match.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.IsHTML != null)
                {
                    hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                }
                if (this.IgnoreReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreReplyTo.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.TemplateId != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateId.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateInboxOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for updating inbox properties
    /// </summary>
    [DataContract(Name = "UpdateInboxOptions")]
    public partial class UpdateInboxOptions : IEquatable<UpdateInboxOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateInboxOptions" /> class.
        /// </summary>
        /// <param name="name">Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search.</param>
        /// <param name="description">Description of an inbox for labelling and searching purposes.</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI..</param>
        /// <param name="expiresAt">Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email..</param>
        /// <param name="favourite">Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering.</param>
        public UpdateInboxOptions(string name = default(string), string description = default(string), List<string> tags = default(List<string>), DateTime? expiresAt = default(DateTime?), bool? favourite = default(bool?))
        {
            this.Name = name;
            this.Description = description;
            this.Tags = tags;
            this.ExpiresAt = expiresAt;
            this.Favourite = favourite;
        }

        /// <summary>
        /// Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search
        /// </summary>
        /// <value>Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Description of an inbox for labelling and searching purposes
        /// </summary>
        /// <value>Description of an inbox for labelling and searching purposes</value>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.
        /// </summary>
        /// <value>Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.
        /// </summary>
        /// <value>Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.</value>
        [DataMember(Name = "expiresAt", EmitDefaultValue = true)]
        public DateTime? ExpiresAt { get; set; }

        /// <summary>
        /// Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "favourite", EmitDefaultValue = true)]
        public bool? Favourite { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateInboxOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  ExpiresAt: ").Append(ExpiresAt).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateInboxOptions);
        }

        /// <summary>
        /// Returns true if UpdateInboxOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateInboxOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateInboxOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.ExpiresAt == input.ExpiresAt ||
                    (this.ExpiresAt != null &&
                    this.ExpiresAt.Equals(input.ExpiresAt))
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    (this.Favourite != null &&
                    this.Favourite.Equals(input.Favourite))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                if (this.ExpiresAt != null)
                {
                    hashCode = (hashCode * 59) + this.ExpiresAt.GetHashCode();
                }
                if (this.Favourite != null)
                {
                    hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateImapAccessOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Edit access details for inbox using IMAP
    /// </summary>
    [DataContract(Name = "UpdateImapAccessOptions")]
    public partial class UpdateImapAccessOptions : IEquatable<UpdateImapAccessOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateImapAccessOptions" /> class.
        /// </summary>
        /// <param name="imapUsername">IMAP username for login.</param>
        /// <param name="imapPassword">IMAP password for login.</param>
        public UpdateImapAccessOptions(string imapUsername = default(string), string imapPassword = default(string))
        {
            this.ImapUsername = imapUsername;
            this.ImapPassword = imapPassword;
        }

        /// <summary>
        /// IMAP username for login
        /// </summary>
        /// <value>IMAP username for login</value>
        [DataMember(Name = "imapUsername", EmitDefaultValue = true)]
        public string ImapUsername { get; set; }

        /// <summary>
        /// IMAP password for login
        /// </summary>
        /// <value>IMAP password for login</value>
        [DataMember(Name = "imapPassword", EmitDefaultValue = true)]
        public string ImapPassword { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateImapAccessOptions {\n");
            sb.Append("  ImapUsername: ").Append(ImapUsername).Append("\n");
            sb.Append("  ImapPassword: ").Append(ImapPassword).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateImapAccessOptions);
        }

        /// <summary>
        /// Returns true if UpdateImapAccessOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateImapAccessOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateImapAccessOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ImapUsername == input.ImapUsername ||
                    (this.ImapUsername != null &&
                    this.ImapUsername.Equals(input.ImapUsername))
                ) && 
                (
                    this.ImapPassword == input.ImapPassword ||
                    (this.ImapPassword != null &&
                    this.ImapPassword.Equals(input.ImapPassword))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.ImapUsername.GetHashCode();
                }
                if (this.ImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPassword.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateGroupContacts.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Update group contacts options. Pass a list of contact ids to replace existing group contacts.
    /// </summary>
    [DataContract(Name = "UpdateGroupContacts")]
    public partial class UpdateGroupContacts : IEquatable<UpdateGroupContacts>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateGroupContacts" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UpdateGroupContacts() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateGroupContacts" /> class.
        /// </summary>
        /// <param name="contactIds">contactIds (required).</param>
        public UpdateGroupContacts(List<Guid> contactIds = default(List<Guid>))
        {
            // to ensure "contactIds" is required (not null)
            if (contactIds == null)
            {
                throw new ArgumentNullException("contactIds is a required property for UpdateGroupContacts and cannot be null");
            }
            this.ContactIds = contactIds;
        }

        /// <summary>
        /// Gets or Sets ContactIds
        /// </summary>
        [DataMember(Name = "contactIds", IsRequired = true, EmitDefaultValue = true)]
        public List<Guid> ContactIds { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateGroupContacts {\n");
            sb.Append("  ContactIds: ").Append(ContactIds).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateGroupContacts);
        }

        /// <summary>
        /// Returns true if UpdateGroupContacts instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateGroupContacts to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateGroupContacts input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ContactIds == input.ContactIds ||
                    this.ContactIds != null &&
                    input.ContactIds != null &&
                    this.ContactIds.SequenceEqual(input.ContactIds)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ContactIds != null)
                {
                    hashCode = (hashCode * 59) + this.ContactIds.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating a domain to use with MailSlurp. You must have ownership access to this domain in order to verify it. Domains will not functionally currently until the domain has been verified. See https://www.mailslurp.com/guides/custom-domains for help.
    /// </summary>
    [DataContract(Name = "UpdateDomainOptions")]
    public partial class UpdateDomainOptions : IEquatable<UpdateDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateDomainOptions" /> class.
        /// </summary>
        /// <param name="catchAllInboxId">catchAllInboxId.</param>
        public UpdateDomainOptions(Guid? catchAllInboxId = default(Guid?))
        {
            this.CatchAllInboxId = catchAllInboxId;
        }

        /// <summary>
        /// Gets or Sets CatchAllInboxId
        /// </summary>
        [DataMember(Name = "catchAllInboxId", EmitDefaultValue = true)]
        public Guid? CatchAllInboxId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateDomainOptions {\n");
            sb.Append("  CatchAllInboxId: ").Append(CatchAllInboxId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateDomainOptions);
        }

        /// <summary>
        /// Returns true if UpdateDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CatchAllInboxId == input.CatchAllInboxId ||
                    (this.CatchAllInboxId != null &&
                    this.CatchAllInboxId.Equals(input.CatchAllInboxId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CatchAllInboxId != null)
                {
                    hashCode = (hashCode * 59) + this.CatchAllInboxId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UpdateAliasOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Update an email alias
    /// </summary>
    [DataContract(Name = "UpdateAliasOptions")]
    public partial class UpdateAliasOptions : IEquatable<UpdateAliasOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateAliasOptions" /> class.
        /// </summary>
        /// <param name="name">Optional name for alias.</param>
        public UpdateAliasOptions(string name = default(string))
        {
            this.Name = name;
        }

        /// <summary>
        /// Optional name for alias
        /// </summary>
        /// <value>Optional name for alias</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UpdateAliasOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UpdateAliasOptions);
        }

        /// <summary>
        /// Returns true if UpdateAliasOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of UpdateAliasOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UpdateAliasOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UnseenErrorCountDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Number of unseen errors
    /// </summary>
    [DataContract(Name = "UnseenErrorCountDto")]
    public partial class UnseenErrorCountDto : IEquatable<UnseenErrorCountDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UnseenErrorCountDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UnseenErrorCountDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UnseenErrorCountDto" /> class.
        /// </summary>
        /// <param name="count">count (required).</param>
        public UnseenErrorCountDto(long count = default(long))
        {
            this.Count = count;
        }

        /// <summary>
        /// Gets or Sets Count
        /// </summary>
        [DataMember(Name = "count", IsRequired = true, EmitDefaultValue = true)]
        public long Count { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UnseenErrorCountDto {\n");
            sb.Append("  Count: ").Append(Count).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UnseenErrorCountDto);
        }

        /// <summary>
        /// Returns true if UnseenErrorCountDto instances are equal
        /// </summary>
        /// <param name="input">Instance of UnseenErrorCountDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UnseenErrorCountDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Count == input.Count ||
                    this.Count.Equals(input.Count)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Count.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UnreadCount.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Number of unread entities
    /// </summary>
    [DataContract(Name = "UnreadCount")]
    public partial class UnreadCount : IEquatable<UnreadCount>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UnreadCount" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UnreadCount() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UnreadCount" /> class.
        /// </summary>
        /// <param name="count">count (required).</param>
        public UnreadCount(long count = default(long))
        {
            this.Count = count;
        }

        /// <summary>
        /// Gets or Sets Count
        /// </summary>
        [DataMember(Name = "count", IsRequired = true, EmitDefaultValue = true)]
        public long Count { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UnreadCount {\n");
            sb.Append("  Count: ").Append(Count).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UnreadCount);
        }

        /// <summary>
        /// Returns true if UnreadCount instances are equal
        /// </summary>
        /// <param name="input">Instance of UnreadCount to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UnreadCount input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Count == input.Count ||
                    this.Count.Equals(input.Count)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Count.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/UnknownMissedEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Unknown missed email projection
    /// </summary>
    [DataContract(Name = "UnknownMissedEmailProjection")]
    public partial class UnknownMissedEmailProjection : IEquatable<UnknownMissedEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UnknownMissedEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected UnknownMissedEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="UnknownMissedEmailProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="to">to.</param>
        /// <param name="subject">subject.</param>
        /// <param name="id">id (required).</param>
        /// <param name="from">from.</param>
        public UnknownMissedEmailProjection(DateTime createdAt = default(DateTime), List<string> to = default(List<string>), string subject = default(string), Guid id = default(Guid), string from = default(string))
        {
            this.CreatedAt = createdAt;
            this.Id = id;
            this.To = to;
            this.Subject = subject;
            this.From = from;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets To
        /// </summary>
        [DataMember(Name = "to", EmitDefaultValue = false)]
        public List<string> To { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = false)]
        public string From { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class UnknownMissedEmailProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as UnknownMissedEmailProjection);
        }

        /// <summary>
        /// Returns true if UnknownMissedEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of UnknownMissedEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(UnknownMissedEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TrackingPixelProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Tracking pixel data
    /// </summary>
    [DataContract(Name = "TrackingPixelProjection")]
    public partial class TrackingPixelProjection : IEquatable<TrackingPixelProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingPixelProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TrackingPixelProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingPixelProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="sentEmailId">sentEmailId.</param>
        /// <param name="recipient">recipient.</param>
        /// <param name="seen">seen (required).</param>
        /// <param name="seenAt">seenAt.</param>
        /// <param name="name">name.</param>
        /// <param name="id">id (required).</param>
        public TrackingPixelProjection(DateTime createdAt = default(DateTime), Guid inboxId = default(Guid), Guid userId = default(Guid), Guid sentEmailId = default(Guid), string recipient = default(string), bool seen = default(bool), DateTime seenAt = default(DateTime), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UserId = userId;
            this.Seen = seen;
            this.Id = id;
            this.InboxId = inboxId;
            this.SentEmailId = sentEmailId;
            this.Recipient = recipient;
            this.SeenAt = seenAt;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = false)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets SentEmailId
        /// </summary>
        [DataMember(Name = "sentEmailId", EmitDefaultValue = false)]
        public Guid SentEmailId { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", EmitDefaultValue = false)]
        public string Recipient { get; set; }

        /// <summary>
        /// Gets or Sets Seen
        /// </summary>
        [DataMember(Name = "seen", IsRequired = true, EmitDefaultValue = true)]
        public bool Seen { get; set; }

        /// <summary>
        /// Gets or Sets SeenAt
        /// </summary>
        [DataMember(Name = "seenAt", EmitDefaultValue = false)]
        public DateTime SeenAt { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TrackingPixelProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("  Seen: ").Append(Seen).Append("\n");
            sb.Append("  SeenAt: ").Append(SeenAt).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TrackingPixelProjection);
        }

        /// <summary>
        /// Returns true if TrackingPixelProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of TrackingPixelProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TrackingPixelProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                ) && 
                (
                    this.Seen == input.Seen ||
                    this.Seen.Equals(input.Seen)
                ) && 
                (
                    this.SeenAt == input.SeenAt ||
                    (this.SeenAt != null &&
                    this.SeenAt.Equals(input.SeenAt))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Seen.GetHashCode();
                if (this.SeenAt != null)
                {
                    hashCode = (hashCode * 59) + this.SeenAt.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TrackingPixelDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Tracking pixel
    /// </summary>
    [DataContract(Name = "TrackingPixelDto")]
    public partial class TrackingPixelDto : IEquatable<TrackingPixelDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingPixelDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TrackingPixelDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingPixelDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="seen">seen (required).</param>
        /// <param name="recipient">recipient.</param>
        /// <param name="html">html (required).</param>
        /// <param name="url">url (required).</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="sentEmailId">sentEmailId.</param>
        /// <param name="seenAt">seenAt.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public TrackingPixelDto(Guid id = default(Guid), bool seen = default(bool), string recipient = default(string), string html = default(string), string url = default(string), Guid? inboxId = default(Guid?), Guid? sentEmailId = default(Guid?), DateTime? seenAt = default(DateTime?), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.Seen = seen;
            // to ensure "html" is required (not null)
            if (html == null)
            {
                throw new ArgumentNullException("html is a required property for TrackingPixelDto and cannot be null");
            }
            this.Html = html;
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for TrackingPixelDto and cannot be null");
            }
            this.Url = url;
            this.CreatedAt = createdAt;
            this.Recipient = recipient;
            this.InboxId = inboxId;
            this.SentEmailId = sentEmailId;
            this.SeenAt = seenAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Seen
        /// </summary>
        [DataMember(Name = "seen", IsRequired = true, EmitDefaultValue = true)]
        public bool Seen { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", IsRequired = true, EmitDefaultValue = true)]
        public string Html { get; set; }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets SentEmailId
        /// </summary>
        [DataMember(Name = "sentEmailId", EmitDefaultValue = true)]
        public Guid? SentEmailId { get; set; }

        /// <summary>
        /// Gets or Sets SeenAt
        /// </summary>
        [DataMember(Name = "seenAt", EmitDefaultValue = true)]
        public DateTime? SeenAt { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TrackingPixelDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Seen: ").Append(Seen).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  SeenAt: ").Append(SeenAt).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TrackingPixelDto);
        }

        /// <summary>
        /// Returns true if TrackingPixelDto instances are equal
        /// </summary>
        /// <param name="input">Instance of TrackingPixelDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TrackingPixelDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Seen == input.Seen ||
                    this.Seen.Equals(input.Seen)
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                ) && 
                (
                    this.Html == input.Html ||
                    (this.Html != null &&
                    this.Html.Equals(input.Html))
                ) && 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.SeenAt == input.SeenAt ||
                    (this.SeenAt != null &&
                    this.SeenAt.Equals(input.SeenAt))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Seen.GetHashCode();
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                if (this.Html != null)
                {
                    hashCode = (hashCode * 59) + this.Html.GetHashCode();
                }
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.SeenAt != null)
                {
                    hashCode = (hashCode * 59) + this.SeenAt.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ThreadProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// A thread is a message thread created for a message received by an alias
    /// </summary>
    [DataContract(Name = "ThreadProjection")]
    public partial class ThreadProjection : IEquatable<ThreadProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ThreadProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ThreadProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ThreadProjection" /> class.
        /// </summary>
        /// <param name="createdAt">Created at DateTime (required).</param>
        /// <param name="updatedAt">Updated at DateTime (required).</param>
        /// <param name="inboxId">Inbox ID (required).</param>
        /// <param name="userId">User ID (required).</param>
        /// <param name="to">To recipients (required).</param>
        /// <param name="bcc">BCC recipients.</param>
        /// <param name="cc">CC recipients.</param>
        /// <param name="aliasId">Alias ID (required).</param>
        /// <param name="subject">Thread subject.</param>
        /// <param name="name">Name of thread.</param>
        /// <param name="id">ID of email thread (required).</param>
        public ThreadProjection(DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), Guid inboxId = default(Guid), Guid userId = default(Guid), List<string> to = default(List<string>), List<string> bcc = default(List<string>), List<string> cc = default(List<string>), Guid aliasId = default(Guid), string subject = default(string), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.InboxId = inboxId;
            this.UserId = userId;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for ThreadProjection and cannot be null");
            }
            this.To = to;
            this.AliasId = aliasId;
            this.Id = id;
            this.Bcc = bcc;
            this.Cc = cc;
            this.Subject = subject;
            this.Name = name;
        }

        /// <summary>
        /// Created at DateTime
        /// </summary>
        /// <value>Created at DateTime</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Updated at DateTime
        /// </summary>
        /// <value>Updated at DateTime</value>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Inbox ID
        /// </summary>
        /// <value>Inbox ID</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// User ID
        /// </summary>
        /// <value>User ID</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// To recipients
        /// </summary>
        /// <value>To recipients</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// BCC recipients
        /// </summary>
        /// <value>BCC recipients</value>
        [DataMember(Name = "bcc", EmitDefaultValue = false)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// CC recipients
        /// </summary>
        /// <value>CC recipients</value>
        [DataMember(Name = "cc", EmitDefaultValue = false)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Alias ID
        /// </summary>
        /// <value>Alias ID</value>
        [DataMember(Name = "aliasId", IsRequired = true, EmitDefaultValue = true)]
        public Guid AliasId { get; set; }

        /// <summary>
        /// Thread subject
        /// </summary>
        /// <value>Thread subject</value>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Name of thread
        /// </summary>
        /// <value>Name of thread</value>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// ID of email thread
        /// </summary>
        /// <value>ID of email thread</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ThreadProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  AliasId: ").Append(AliasId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ThreadProjection);
        }

        /// <summary>
        /// Returns true if ThreadProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ThreadProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ThreadProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.AliasId == input.AliasId ||
                    (this.AliasId != null &&
                    this.AliasId.Equals(input.AliasId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.AliasId != null)
                {
                    hashCode = (hashCode * 59) + this.AliasId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestPhoneNumberOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// TestPhoneNumberOptions
    /// </summary>
    [DataContract(Name = "TestPhoneNumberOptions")]
    public partial class TestPhoneNumberOptions : IEquatable<TestPhoneNumberOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestPhoneNumberOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestPhoneNumberOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestPhoneNumberOptions" /> class.
        /// </summary>
        /// <param name="message">message (required).</param>
        public TestPhoneNumberOptions(string message = default(string))
        {
            // to ensure "message" is required (not null)
            if (message == null)
            {
                throw new ArgumentNullException("message is a required property for TestPhoneNumberOptions and cannot be null");
            }
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", IsRequired = true, EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestPhoneNumberOptions {\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestPhoneNumberOptions);
        }

        /// <summary>
        /// Returns true if TestPhoneNumberOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of TestPhoneNumberOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestPhoneNumberOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestNewInboxRulesetOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Test inbox ruleset options
    /// </summary>
    [DataContract(Name = "TestNewInboxRulesetOptions")]
    public partial class TestNewInboxRulesetOptions : IEquatable<TestNewInboxRulesetOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestNewInboxRulesetOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestNewInboxRulesetOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestNewInboxRulesetOptions" /> class.
        /// </summary>
        /// <param name="inboxRulesetTestOptions">inboxRulesetTestOptions (required).</param>
        /// <param name="createInboxRulesetOptions">createInboxRulesetOptions (required).</param>
        public TestNewInboxRulesetOptions(InboxRulesetTestOptions inboxRulesetTestOptions = default(InboxRulesetTestOptions), CreateInboxRulesetOptions createInboxRulesetOptions = default(CreateInboxRulesetOptions))
        {
            // to ensure "inboxRulesetTestOptions" is required (not null)
            if (inboxRulesetTestOptions == null)
            {
                throw new ArgumentNullException("inboxRulesetTestOptions is a required property for TestNewInboxRulesetOptions and cannot be null");
            }
            this.InboxRulesetTestOptions = inboxRulesetTestOptions;
            // to ensure "createInboxRulesetOptions" is required (not null)
            if (createInboxRulesetOptions == null)
            {
                throw new ArgumentNullException("createInboxRulesetOptions is a required property for TestNewInboxRulesetOptions and cannot be null");
            }
            this.CreateInboxRulesetOptions = createInboxRulesetOptions;
        }

        /// <summary>
        /// Gets or Sets InboxRulesetTestOptions
        /// </summary>
        [DataMember(Name = "inboxRulesetTestOptions", IsRequired = true, EmitDefaultValue = true)]
        public InboxRulesetTestOptions InboxRulesetTestOptions { get; set; }

        /// <summary>
        /// Gets or Sets CreateInboxRulesetOptions
        /// </summary>
        [DataMember(Name = "createInboxRulesetOptions", IsRequired = true, EmitDefaultValue = true)]
        public CreateInboxRulesetOptions CreateInboxRulesetOptions { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestNewInboxRulesetOptions {\n");
            sb.Append("  InboxRulesetTestOptions: ").Append(InboxRulesetTestOptions).Append("\n");
            sb.Append("  CreateInboxRulesetOptions: ").Append(CreateInboxRulesetOptions).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestNewInboxRulesetOptions);
        }

        /// <summary>
        /// Returns true if TestNewInboxRulesetOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of TestNewInboxRulesetOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestNewInboxRulesetOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxRulesetTestOptions == input.InboxRulesetTestOptions ||
                    (this.InboxRulesetTestOptions != null &&
                    this.InboxRulesetTestOptions.Equals(input.InboxRulesetTestOptions))
                ) && 
                (
                    this.CreateInboxRulesetOptions == input.CreateInboxRulesetOptions ||
                    (this.CreateInboxRulesetOptions != null &&
                    this.CreateInboxRulesetOptions.Equals(input.CreateInboxRulesetOptions))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxRulesetTestOptions != null)
                {
                    hashCode = (hashCode * 59) + this.InboxRulesetTestOptions.GetHashCode();
                }
                if (this.CreateInboxRulesetOptions != null)
                {
                    hashCode = (hashCode * 59) + this.CreateInboxRulesetOptions.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestNewInboxForwarderOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for testing new inbox forwarder rules
    /// </summary>
    [DataContract(Name = "TestNewInboxForwarderOptions")]
    public partial class TestNewInboxForwarderOptions : IEquatable<TestNewInboxForwarderOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestNewInboxForwarderOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestNewInboxForwarderOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestNewInboxForwarderOptions" /> class.
        /// </summary>
        /// <param name="inboxForwarderTestOptions">inboxForwarderTestOptions (required).</param>
        /// <param name="createInboxForwarderOptions">createInboxForwarderOptions (required).</param>
        public TestNewInboxForwarderOptions(InboxForwarderTestOptions inboxForwarderTestOptions = default(InboxForwarderTestOptions), CreateInboxForwarderOptions createInboxForwarderOptions = default(CreateInboxForwarderOptions))
        {
            // to ensure "inboxForwarderTestOptions" is required (not null)
            if (inboxForwarderTestOptions == null)
            {
                throw new ArgumentNullException("inboxForwarderTestOptions is a required property for TestNewInboxForwarderOptions and cannot be null");
            }
            this.InboxForwarderTestOptions = inboxForwarderTestOptions;
            // to ensure "createInboxForwarderOptions" is required (not null)
            if (createInboxForwarderOptions == null)
            {
                throw new ArgumentNullException("createInboxForwarderOptions is a required property for TestNewInboxForwarderOptions and cannot be null");
            }
            this.CreateInboxForwarderOptions = createInboxForwarderOptions;
        }

        /// <summary>
        /// Gets or Sets InboxForwarderTestOptions
        /// </summary>
        [DataMember(Name = "inboxForwarderTestOptions", IsRequired = true, EmitDefaultValue = true)]
        public InboxForwarderTestOptions InboxForwarderTestOptions { get; set; }

        /// <summary>
        /// Gets or Sets CreateInboxForwarderOptions
        /// </summary>
        [DataMember(Name = "createInboxForwarderOptions", IsRequired = true, EmitDefaultValue = true)]
        public CreateInboxForwarderOptions CreateInboxForwarderOptions { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestNewInboxForwarderOptions {\n");
            sb.Append("  InboxForwarderTestOptions: ").Append(InboxForwarderTestOptions).Append("\n");
            sb.Append("  CreateInboxForwarderOptions: ").Append(CreateInboxForwarderOptions).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestNewInboxForwarderOptions);
        }

        /// <summary>
        /// Returns true if TestNewInboxForwarderOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of TestNewInboxForwarderOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestNewInboxForwarderOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxForwarderTestOptions == input.InboxForwarderTestOptions ||
                    (this.InboxForwarderTestOptions != null &&
                    this.InboxForwarderTestOptions.Equals(input.InboxForwarderTestOptions))
                ) && 
                (
                    this.CreateInboxForwarderOptions == input.CreateInboxForwarderOptions ||
                    (this.CreateInboxForwarderOptions != null &&
                    this.CreateInboxForwarderOptions.Equals(input.CreateInboxForwarderOptions))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxForwarderTestOptions != null)
                {
                    hashCode = (hashCode * 59) + this.InboxForwarderTestOptions.GetHashCode();
                }
                if (this.CreateInboxForwarderOptions != null)
                {
                    hashCode = (hashCode * 59) + this.CreateInboxForwarderOptions.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestInboxRulesetSendingResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// TestInboxRulesetSendingResult
    /// </summary>
    [DataContract(Name = "TestInboxRulesetSendingResult")]
    public partial class TestInboxRulesetSendingResult : IEquatable<TestInboxRulesetSendingResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetSendingResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestInboxRulesetSendingResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetSendingResult" /> class.
        /// </summary>
        /// <param name="canSend">canSend (required).</param>
        public TestInboxRulesetSendingResult(bool canSend = default(bool))
        {
            this.CanSend = canSend;
        }

        /// <summary>
        /// Gets or Sets CanSend
        /// </summary>
        [DataMember(Name = "canSend", IsRequired = true, EmitDefaultValue = true)]
        public bool CanSend { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestInboxRulesetSendingResult {\n");
            sb.Append("  CanSend: ").Append(CanSend).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestInboxRulesetSendingResult);
        }

        /// <summary>
        /// Returns true if TestInboxRulesetSendingResult instances are equal
        /// </summary>
        /// <param name="input">Instance of TestInboxRulesetSendingResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestInboxRulesetSendingResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CanSend == input.CanSend ||
                    this.CanSend.Equals(input.CanSend)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.CanSend.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestInboxRulesetSendingOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Test options for inbox ruleset sending test
    /// </summary>
    [DataContract(Name = "TestInboxRulesetSendingOptions")]
    public partial class TestInboxRulesetSendingOptions : IEquatable<TestInboxRulesetSendingOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetSendingOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestInboxRulesetSendingOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetSendingOptions" /> class.
        /// </summary>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="recipient">recipient (required).</param>
        public TestInboxRulesetSendingOptions(Guid inboxId = default(Guid), string recipient = default(string))
        {
            this.InboxId = inboxId;
            // to ensure "recipient" is required (not null)
            if (recipient == null)
            {
                throw new ArgumentNullException("recipient is a required property for TestInboxRulesetSendingOptions and cannot be null");
            }
            this.Recipient = recipient;
        }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", IsRequired = true, EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestInboxRulesetSendingOptions {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestInboxRulesetSendingOptions);
        }

        /// <summary>
        /// Returns true if TestInboxRulesetSendingOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of TestInboxRulesetSendingOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestInboxRulesetSendingOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestInboxRulesetReceivingResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// TestInboxRulesetReceivingResult
    /// </summary>
    [DataContract(Name = "TestInboxRulesetReceivingResult")]
    public partial class TestInboxRulesetReceivingResult : IEquatable<TestInboxRulesetReceivingResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetReceivingResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestInboxRulesetReceivingResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetReceivingResult" /> class.
        /// </summary>
        /// <param name="canReceive">canReceive (required).</param>
        public TestInboxRulesetReceivingResult(bool canReceive = default(bool))
        {
            this.CanReceive = canReceive;
        }

        /// <summary>
        /// Gets or Sets CanReceive
        /// </summary>
        [DataMember(Name = "canReceive", IsRequired = true, EmitDefaultValue = true)]
        public bool CanReceive { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestInboxRulesetReceivingResult {\n");
            sb.Append("  CanReceive: ").Append(CanReceive).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestInboxRulesetReceivingResult);
        }

        /// <summary>
        /// Returns true if TestInboxRulesetReceivingResult instances are equal
        /// </summary>
        /// <param name="input">Instance of TestInboxRulesetReceivingResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestInboxRulesetReceivingResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CanReceive == input.CanReceive ||
                    this.CanReceive.Equals(input.CanReceive)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.CanReceive.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TestInboxRulesetReceivingOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Test options for inbox ruleset receiving test
    /// </summary>
    [DataContract(Name = "TestInboxRulesetReceivingOptions")]
    public partial class TestInboxRulesetReceivingOptions : IEquatable<TestInboxRulesetReceivingOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetReceivingOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TestInboxRulesetReceivingOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TestInboxRulesetReceivingOptions" /> class.
        /// </summary>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="fromSender">fromSender (required).</param>
        public TestInboxRulesetReceivingOptions(Guid inboxId = default(Guid), string fromSender = default(string))
        {
            this.InboxId = inboxId;
            // to ensure "fromSender" is required (not null)
            if (fromSender == null)
            {
                throw new ArgumentNullException("fromSender is a required property for TestInboxRulesetReceivingOptions and cannot be null");
            }
            this.FromSender = fromSender;
        }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets FromSender
        /// </summary>
        [DataMember(Name = "fromSender", IsRequired = true, EmitDefaultValue = true)]
        public string FromSender { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TestInboxRulesetReceivingOptions {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  FromSender: ").Append(FromSender).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TestInboxRulesetReceivingOptions);
        }

        /// <summary>
        /// Returns true if TestInboxRulesetReceivingOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of TestInboxRulesetReceivingOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TestInboxRulesetReceivingOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.FromSender == input.FromSender ||
                    (this.FromSender != null &&
                    this.FromSender.Equals(input.FromSender))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.FromSender != null)
                {
                    hashCode = (hashCode * 59) + this.FromSender.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TemplateVariable.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Variable for use with email template
    /// </summary>
    [DataContract(Name = "TemplateVariable")]
    public partial class TemplateVariable : IEquatable<TemplateVariable>, IValidatableObject
    {
        /// <summary>
        /// The type of variable
        /// </summary>
        /// <value>The type of variable</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum VariableTypeEnum
        {
            /// <summary>
            /// Enum STRING for value: STRING
            /// </summary>
            [EnumMember(Value = "STRING")]
            STRING = 1

        }


        /// <summary>
        /// The type of variable
        /// </summary>
        /// <value>The type of variable</value>
        [DataMember(Name = "variableType", IsRequired = true, EmitDefaultValue = true)]
        public VariableTypeEnum VariableType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateVariable" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TemplateVariable() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateVariable" /> class.
        /// </summary>
        /// <param name="name">Name of variable. This can be used in a template as {{name}} (required).</param>
        /// <param name="variableType">The type of variable (required).</param>
        public TemplateVariable(string name = default(string), VariableTypeEnum variableType = default(VariableTypeEnum))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for TemplateVariable and cannot be null");
            }
            this.Name = name;
            this.VariableType = variableType;
        }

        /// <summary>
        /// Name of variable. This can be used in a template as {{name}}
        /// </summary>
        /// <value>Name of variable. This can be used in a template as {{name}}</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TemplateVariable {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  VariableType: ").Append(VariableType).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TemplateVariable);
        }

        /// <summary>
        /// Returns true if TemplateVariable instances are equal
        /// </summary>
        /// <param name="input">Instance of TemplateVariable to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TemplateVariable input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.VariableType == input.VariableType ||
                    this.VariableType.Equals(input.VariableType)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.VariableType.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TemplateProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email template data
    /// </summary>
    [DataContract(Name = "TemplateProjection")]
    public partial class TemplateProjection : IEquatable<TemplateProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TemplateProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="variables">variables (required).</param>
        /// <param name="name">name (required).</param>
        /// <param name="id">id (required).</param>
        public TemplateProjection(DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), List<string> variables = default(List<string>), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            // to ensure "variables" is required (not null)
            if (variables == null)
            {
                throw new ArgumentNullException("variables is a required property for TemplateProjection and cannot be null");
            }
            this.Variables = variables;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for TemplateProjection and cannot be null");
            }
            this.Name = name;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Variables
        /// </summary>
        [DataMember(Name = "variables", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Variables { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TemplateProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  Variables: ").Append(Variables).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TemplateProjection);
        }

        /// <summary>
        /// Returns true if TemplateProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of TemplateProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TemplateProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.Variables == input.Variables ||
                    this.Variables != null &&
                    input.Variables != null &&
                    this.Variables.SequenceEqual(input.Variables)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                if (this.Variables != null)
                {
                    hashCode = (hashCode * 59) + this.Variables.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TemplatePreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// TemplatePreview
    /// </summary>
    [DataContract(Name = "TemplatePreview")]
    public partial class TemplatePreview : IEquatable<TemplatePreview>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplatePreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TemplatePreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplatePreview" /> class.
        /// </summary>
        /// <param name="preview">preview (required).</param>
        public TemplatePreview(string preview = default(string))
        {
            // to ensure "preview" is required (not null)
            if (preview == null)
            {
                throw new ArgumentNullException("preview is a required property for TemplatePreview and cannot be null");
            }
            this.Preview = preview;
        }

        /// <summary>
        /// Gets or Sets Preview
        /// </summary>
        [DataMember(Name = "preview", IsRequired = true, EmitDefaultValue = true)]
        public string Preview { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TemplatePreview {\n");
            sb.Append("  Preview: ").Append(Preview).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TemplatePreview);
        }

        /// <summary>
        /// Returns true if TemplatePreview instances are equal
        /// </summary>
        /// <param name="input">Instance of TemplatePreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TemplatePreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Preview == input.Preview ||
                    (this.Preview != null &&
                    this.Preview.Equals(input.Preview))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Preview != null)
                {
                    hashCode = (hashCode * 59) + this.Preview.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/TemplateDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email template
    /// </summary>
    [DataContract(Name = "TemplateDto")]
    public partial class TemplateDto : IEquatable<TemplateDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected TemplateDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateDto" /> class.
        /// </summary>
        /// <param name="id">ID of template (required).</param>
        /// <param name="name">Template name (required).</param>
        /// <param name="variables">Variables available in template that can be replaced with values (required).</param>
        /// <param name="content">Content of the template (required).</param>
        /// <param name="createdAt">Created at time (required).</param>
        public TemplateDto(Guid id = default(Guid), string name = default(string), List<TemplateVariable> variables = default(List<TemplateVariable>), string content = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for TemplateDto and cannot be null");
            }
            this.Name = name;
            // to ensure "variables" is required (not null)
            if (variables == null)
            {
                throw new ArgumentNullException("variables is a required property for TemplateDto and cannot be null");
            }
            this.Variables = variables;
            // to ensure "content" is required (not null)
            if (content == null)
            {
                throw new ArgumentNullException("content is a required property for TemplateDto and cannot be null");
            }
            this.Content = content;
            this.CreatedAt = createdAt;
        }

        /// <summary>
        /// ID of template
        /// </summary>
        /// <value>ID of template</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Template name
        /// </summary>
        /// <value>Template name</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Variables available in template that can be replaced with values
        /// </summary>
        /// <value>Variables available in template that can be replaced with values</value>
        [DataMember(Name = "variables", IsRequired = true, EmitDefaultValue = true)]
        public List<TemplateVariable> Variables { get; set; }

        /// <summary>
        /// Content of the template
        /// </summary>
        /// <value>Content of the template</value>
        [DataMember(Name = "content", IsRequired = true, EmitDefaultValue = true)]
        public string Content { get; set; }

        /// <summary>
        /// Created at time
        /// </summary>
        /// <value>Created at time</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class TemplateDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Variables: ").Append(Variables).Append("\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as TemplateDto);
        }

        /// <summary>
        /// Returns true if TemplateDto instances are equal
        /// </summary>
        /// <param name="input">Instance of TemplateDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(TemplateDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Variables == input.Variables ||
                    this.Variables != null &&
                    input.Variables != null &&
                    this.Variables.SequenceEqual(input.Variables)
                ) && 
                (
                    this.Content == input.Content ||
                    (this.Content != null &&
                    this.Content.Equals(input.Content))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Variables != null)
                {
                    hashCode = (hashCode * 59) + this.Variables.GetHashCode();
                }
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SpellingIssue.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SpellingIssue
    /// </summary>
    [DataContract(Name = "SpellingIssue")]
    public partial class SpellingIssue : IEquatable<SpellingIssue>, IValidatableObject
    {
        /// <summary>
        /// Defines Severity
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SeverityEnum
        {
            /// <summary>
            /// Enum Warning for value: Warning
            /// </summary>
            [EnumMember(Value = "Warning")]
            Warning = 1,

            /// <summary>
            /// Enum Error for value: Error
            /// </summary>
            [EnumMember(Value = "Error")]
            Error = 2

        }


        /// <summary>
        /// Gets or Sets Severity
        /// </summary>
        [DataMember(Name = "severity", IsRequired = true, EmitDefaultValue = true)]
        public SeverityEnum Severity { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="SpellingIssue" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SpellingIssue() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SpellingIssue" /> class.
        /// </summary>
        /// <param name="group">group (required).</param>
        /// <param name="suggestion">suggestion (required).</param>
        /// <param name="severity">severity (required).</param>
        /// <param name="message">message (required).</param>
        public SpellingIssue(string group = default(string), string suggestion = default(string), SeverityEnum severity = default(SeverityEnum), string message = default(string))
        {
            // to ensure "group" is required (not null)
            if (group == null)
            {
                throw new ArgumentNullException("group is a required property for SpellingIssue and cannot be null");
            }
            this.Group = group;
            // to ensure "suggestion" is required (not null)
            if (suggestion == null)
            {
                throw new ArgumentNullException("suggestion is a required property for SpellingIssue and cannot be null");
            }
            this.Suggestion = suggestion;
            this.Severity = severity;
            // to ensure "message" is required (not null)
            if (message == null)
            {
                throw new ArgumentNullException("message is a required property for SpellingIssue and cannot be null");
            }
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Group
        /// </summary>
        [DataMember(Name = "group", IsRequired = true, EmitDefaultValue = true)]
        public string Group { get; set; }

        /// <summary>
        /// Gets or Sets Suggestion
        /// </summary>
        [DataMember(Name = "suggestion", IsRequired = true, EmitDefaultValue = true)]
        public string Suggestion { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", IsRequired = true, EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SpellingIssue {\n");
            sb.Append("  Group: ").Append(Group).Append("\n");
            sb.Append("  Suggestion: ").Append(Suggestion).Append("\n");
            sb.Append("  Severity: ").Append(Severity).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SpellingIssue);
        }

        /// <summary>
        /// Returns true if SpellingIssue instances are equal
        /// </summary>
        /// <param name="input">Instance of SpellingIssue to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SpellingIssue input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Group == input.Group ||
                    (this.Group != null &&
                    this.Group.Equals(input.Group))
                ) && 
                (
                    this.Suggestion == input.Suggestion ||
                    (this.Suggestion != null &&
                    this.Suggestion.Equals(input.Suggestion))
                ) && 
                (
                    this.Severity == input.Severity ||
                    this.Severity.Equals(input.Severity)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Group != null)
                {
                    hashCode = (hashCode * 59) + this.Group.GetHashCode();
                }
                if (this.Suggestion != null)
                {
                    hashCode = (hashCode * 59) + this.Suggestion.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Severity.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SortObject.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SortObject
    /// </summary>
    [DataContract(Name = "SortObject")]
    public partial class SortObject : IEquatable<SortObject>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SortObject" /> class.
        /// </summary>
        /// <param name="sorted">sorted.</param>
        /// <param name="unsorted">unsorted.</param>
        /// <param name="empty">empty.</param>
        public SortObject(bool sorted = default(bool), bool unsorted = default(bool), bool empty = default(bool))
        {
            this.Sorted = sorted;
            this.Unsorted = unsorted;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Sorted
        /// </summary>
        [DataMember(Name = "sorted", EmitDefaultValue = true)]
        public bool Sorted { get; set; }

        /// <summary>
        /// Gets or Sets Unsorted
        /// </summary>
        [DataMember(Name = "unsorted", EmitDefaultValue = true)]
        public bool Unsorted { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SortObject {\n");
            sb.Append("  Sorted: ").Append(Sorted).Append("\n");
            sb.Append("  Unsorted: ").Append(Unsorted).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SortObject);
        }

        /// <summary>
        /// Returns true if SortObject instances are equal
        /// </summary>
        /// <param name="input">Instance of SortObject to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SortObject input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Sorted == input.Sorted ||
                    this.Sorted.Equals(input.Sorted)
                ) && 
                (
                    this.Unsorted == input.Unsorted ||
                    this.Unsorted.Equals(input.Unsorted)
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Sorted.GetHashCode();
                hashCode = (hashCode * 59) + this.Unsorted.GetHashCode();
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmtpAccessDetails.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Access details for inbox using SMTP
    /// </summary>
    [DataContract(Name = "SmtpAccessDetails")]
    public partial class SmtpAccessDetails : IEquatable<SmtpAccessDetails>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SmtpAccessDetails" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmtpAccessDetails() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmtpAccessDetails" /> class.
        /// </summary>
        /// <param name="secureSmtpServerHost">Secure TLS SMTP server host domain (required).</param>
        /// <param name="secureSmtpServerPort">Secure TLS SMTP server host port (required).</param>
        /// <param name="secureSmtpUsername">Secure TLS SMTP username for login (required).</param>
        /// <param name="secureSmtpPassword">Secure TLS SMTP password for login (required).</param>
        /// <param name="smtpServerHost">SMTP server host domain (required).</param>
        /// <param name="smtpServerPort">SMTP server host port (required).</param>
        /// <param name="smtpUsername">SMTP username for login (required).</param>
        /// <param name="smtpPassword">SMTP password for login (required).</param>
        /// <param name="mailFromDomain">Mail from domain or SMTP HELO value.</param>
        public SmtpAccessDetails(string secureSmtpServerHost = default(string), int secureSmtpServerPort = default(int), string secureSmtpUsername = default(string), string secureSmtpPassword = default(string), string smtpServerHost = default(string), int smtpServerPort = default(int), string smtpUsername = default(string), string smtpPassword = default(string), string mailFromDomain = default(string))
        {
            // to ensure "secureSmtpServerHost" is required (not null)
            if (secureSmtpServerHost == null)
            {
                throw new ArgumentNullException("secureSmtpServerHost is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpServerHost = secureSmtpServerHost;
            this.SecureSmtpServerPort = secureSmtpServerPort;
            // to ensure "secureSmtpUsername" is required (not null)
            if (secureSmtpUsername == null)
            {
                throw new ArgumentNullException("secureSmtpUsername is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpUsername = secureSmtpUsername;
            // to ensure "secureSmtpPassword" is required (not null)
            if (secureSmtpPassword == null)
            {
                throw new ArgumentNullException("secureSmtpPassword is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpPassword = secureSmtpPassword;
            // to ensure "smtpServerHost" is required (not null)
            if (smtpServerHost == null)
            {
                throw new ArgumentNullException("smtpServerHost is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SmtpServerHost = smtpServerHost;
            this.SmtpServerPort = smtpServerPort;
            // to ensure "smtpUsername" is required (not null)
            if (smtpUsername == null)
            {
                throw new ArgumentNullException("smtpUsername is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SmtpUsername = smtpUsername;
            // to ensure "smtpPassword" is required (not null)
            if (smtpPassword == null)
            {
                throw new ArgumentNullException("smtpPassword is a required property for SmtpAccessDetails and cannot be null");
            }
            this.SmtpPassword = smtpPassword;
            this.MailFromDomain = mailFromDomain;
        }

        /// <summary>
        /// Secure TLS SMTP server host domain
        /// </summary>
        /// <value>Secure TLS SMTP server host domain</value>
        [DataMember(Name = "secureSmtpServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpServerHost { get; set; }

        /// <summary>
        /// Secure TLS SMTP server host port
        /// </summary>
        /// <value>Secure TLS SMTP server host port</value>
        [DataMember(Name = "secureSmtpServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SecureSmtpServerPort { get; set; }

        /// <summary>
        /// Secure TLS SMTP username for login
        /// </summary>
        /// <value>Secure TLS SMTP username for login</value>
        [DataMember(Name = "secureSmtpUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpUsername { get; set; }

        /// <summary>
        /// Secure TLS SMTP password for login
        /// </summary>
        /// <value>Secure TLS SMTP password for login</value>
        [DataMember(Name = "secureSmtpPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpPassword { get; set; }

        /// <summary>
        /// SMTP server host domain
        /// </summary>
        /// <value>SMTP server host domain</value>
        [DataMember(Name = "smtpServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpServerHost { get; set; }

        /// <summary>
        /// SMTP server host port
        /// </summary>
        /// <value>SMTP server host port</value>
        [DataMember(Name = "smtpServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SmtpServerPort { get; set; }

        /// <summary>
        /// SMTP username for login
        /// </summary>
        /// <value>SMTP username for login</value>
        [DataMember(Name = "smtpUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpUsername { get; set; }

        /// <summary>
        /// SMTP password for login
        /// </summary>
        /// <value>SMTP password for login</value>
        [DataMember(Name = "smtpPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpPassword { get; set; }

        /// <summary>
        /// Mail from domain or SMTP HELO value
        /// </summary>
        /// <value>Mail from domain or SMTP HELO value</value>
        [DataMember(Name = "mailFromDomain", EmitDefaultValue = true)]
        public string MailFromDomain { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmtpAccessDetails {\n");
            sb.Append("  SecureSmtpServerHost: ").Append(SecureSmtpServerHost).Append("\n");
            sb.Append("  SecureSmtpServerPort: ").Append(SecureSmtpServerPort).Append("\n");
            sb.Append("  SecureSmtpUsername: ").Append(SecureSmtpUsername).Append("\n");
            sb.Append("  SecureSmtpPassword: ").Append(SecureSmtpPassword).Append("\n");
            sb.Append("  SmtpServerHost: ").Append(SmtpServerHost).Append("\n");
            sb.Append("  SmtpServerPort: ").Append(SmtpServerPort).Append("\n");
            sb.Append("  SmtpUsername: ").Append(SmtpUsername).Append("\n");
            sb.Append("  SmtpPassword: ").Append(SmtpPassword).Append("\n");
            sb.Append("  MailFromDomain: ").Append(MailFromDomain).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmtpAccessDetails);
        }

        /// <summary>
        /// Returns true if SmtpAccessDetails instances are equal
        /// </summary>
        /// <param name="input">Instance of SmtpAccessDetails to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmtpAccessDetails input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SecureSmtpServerHost == input.SecureSmtpServerHost ||
                    (this.SecureSmtpServerHost != null &&
                    this.SecureSmtpServerHost.Equals(input.SecureSmtpServerHost))
                ) && 
                (
                    this.SecureSmtpServerPort == input.SecureSmtpServerPort ||
                    this.SecureSmtpServerPort.Equals(input.SecureSmtpServerPort)
                ) && 
                (
                    this.SecureSmtpUsername == input.SecureSmtpUsername ||
                    (this.SecureSmtpUsername != null &&
                    this.SecureSmtpUsername.Equals(input.SecureSmtpUsername))
                ) && 
                (
                    this.SecureSmtpPassword == input.SecureSmtpPassword ||
                    (this.SecureSmtpPassword != null &&
                    this.SecureSmtpPassword.Equals(input.SecureSmtpPassword))
                ) && 
                (
                    this.SmtpServerHost == input.SmtpServerHost ||
                    (this.SmtpServerHost != null &&
                    this.SmtpServerHost.Equals(input.SmtpServerHost))
                ) && 
                (
                    this.SmtpServerPort == input.SmtpServerPort ||
                    this.SmtpServerPort.Equals(input.SmtpServerPort)
                ) && 
                (
                    this.SmtpUsername == input.SmtpUsername ||
                    (this.SmtpUsername != null &&
                    this.SmtpUsername.Equals(input.SmtpUsername))
                ) && 
                (
                    this.SmtpPassword == input.SmtpPassword ||
                    (this.SmtpPassword != null &&
                    this.SmtpPassword.Equals(input.SmtpPassword))
                ) && 
                (
                    this.MailFromDomain == input.MailFromDomain ||
                    (this.MailFromDomain != null &&
                    this.MailFromDomain.Equals(input.MailFromDomain))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SecureSmtpServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SecureSmtpServerPort.GetHashCode();
                if (this.SecureSmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpUsername.GetHashCode();
                }
                if (this.SecureSmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpPassword.GetHashCode();
                }
                if (this.SmtpServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpServerPort.GetHashCode();
                if (this.SmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpUsername.GetHashCode();
                }
                if (this.SmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpPassword.GetHashCode();
                }
                if (this.MailFromDomain != null)
                {
                    hashCode = (hashCode * 59) + this.MailFromDomain.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmsReplyOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SmsReplyOptions
    /// </summary>
    [DataContract(Name = "SmsReplyOptions")]
    public partial class SmsReplyOptions : IEquatable<SmsReplyOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsReplyOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmsReplyOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsReplyOptions" /> class.
        /// </summary>
        /// <param name="body">body (required).</param>
        public SmsReplyOptions(string body = default(string))
        {
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for SmsReplyOptions and cannot be null");
            }
            this.Body = body;
        }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmsReplyOptions {\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmsReplyOptions);
        }

        /// <summary>
        /// Returns true if SmsReplyOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SmsReplyOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmsReplyOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmsProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SMS projection
    /// </summary>
    [DataContract(Name = "SmsProjection")]
    public partial class SmsProjection : IEquatable<SmsProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmsProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsProjection" /> class.
        /// </summary>
        /// <param name="body">body (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="fromNumber">fromNumber (required).</param>
        /// <param name="read">read (required).</param>
        /// <param name="id">id (required).</param>
        public SmsProjection(string body = default(string), DateTime createdAt = default(DateTime), Guid userId = default(Guid), Guid phoneNumber = default(Guid), string fromNumber = default(string), bool read = default(bool), Guid id = default(Guid))
        {
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for SmsProjection and cannot be null");
            }
            this.Body = body;
            this.CreatedAt = createdAt;
            this.UserId = userId;
            this.PhoneNumber = phoneNumber;
            // to ensure "fromNumber" is required (not null)
            if (fromNumber == null)
            {
                throw new ArgumentNullException("fromNumber is a required property for SmsProjection and cannot be null");
            }
            this.FromNumber = fromNumber;
            this.Read = read;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets FromNumber
        /// </summary>
        [DataMember(Name = "fromNumber", IsRequired = true, EmitDefaultValue = true)]
        public string FromNumber { get; set; }

        /// <summary>
        /// Gets or Sets Read
        /// </summary>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmsProjection {\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  FromNumber: ").Append(FromNumber).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmsProjection);
        }

        /// <summary>
        /// Returns true if SmsProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of SmsProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmsProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.FromNumber == input.FromNumber ||
                    (this.FromNumber != null &&
                    this.FromNumber.Equals(input.FromNumber))
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                if (this.FromNumber != null)
                {
                    hashCode = (hashCode * 59) + this.FromNumber.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmsPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SmsPreview
    /// </summary>
    [DataContract(Name = "SmsPreview")]
    public partial class SmsPreview : IEquatable<SmsPreview>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmsPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsPreview" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="body">body (required).</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="fromNumber">fromNumber (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public SmsPreview(Guid id = default(Guid), Guid userId = default(Guid), string body = default(string), Guid phoneNumber = default(Guid), string fromNumber = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for SmsPreview and cannot be null");
            }
            this.Body = body;
            this.PhoneNumber = phoneNumber;
            // to ensure "fromNumber" is required (not null)
            if (fromNumber == null)
            {
                throw new ArgumentNullException("fromNumber is a required property for SmsPreview and cannot be null");
            }
            this.FromNumber = fromNumber;
            this.CreatedAt = createdAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets FromNumber
        /// </summary>
        [DataMember(Name = "fromNumber", IsRequired = true, EmitDefaultValue = true)]
        public string FromNumber { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmsPreview {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  FromNumber: ").Append(FromNumber).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmsPreview);
        }

        /// <summary>
        /// Returns true if SmsPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of SmsPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmsPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.FromNumber == input.FromNumber ||
                    (this.FromNumber != null &&
                    this.FromNumber.Equals(input.FromNumber))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                if (this.FromNumber != null)
                {
                    hashCode = (hashCode * 59) + this.FromNumber.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmsMatchOption.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for matching SMS messages in a phone number. Each match option object contains a &#x60;field&#x60;, &#x60;should&#x60; and &#x60;value&#x60; property. Together they form logical conditions such as &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; value.
    /// </summary>
    [DataContract(Name = "SmsMatchOption")]
    public partial class SmsMatchOption : IEquatable<SmsMatchOption>, IValidatableObject
    {
        /// <summary>
        /// Fields of an SMS object that can be used to filter results
        /// </summary>
        /// <value>Fields of an SMS object that can be used to filter results</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum BODY for value: BODY
            /// </summary>
            [EnumMember(Value = "BODY")]
            BODY = 1,

            /// <summary>
            /// Enum FROM for value: FROM
            /// </summary>
            [EnumMember(Value = "FROM")]
            FROM = 2

        }


        /// <summary>
        /// Fields of an SMS object that can be used to filter results
        /// </summary>
        /// <value>Fields of an SMS object that can be used to filter results</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// How the value of the email field specified should be compared to the value given in the match options.
        /// </summary>
        /// <value>How the value of the email field specified should be compared to the value given in the match options.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ShouldEnum
        {
            /// <summary>
            /// Enum MATCH for value: MATCH
            /// </summary>
            [EnumMember(Value = "MATCH")]
            MATCH = 1,

            /// <summary>
            /// Enum CONTAIN for value: CONTAIN
            /// </summary>
            [EnumMember(Value = "CONTAIN")]
            CONTAIN = 2,

            /// <summary>
            /// Enum EQUAL for value: EQUAL
            /// </summary>
            [EnumMember(Value = "EQUAL")]
            EQUAL = 3

        }


        /// <summary>
        /// How the value of the email field specified should be compared to the value given in the match options.
        /// </summary>
        /// <value>How the value of the email field specified should be compared to the value given in the match options.</value>
        [DataMember(Name = "should", IsRequired = true, EmitDefaultValue = true)]
        public ShouldEnum Should { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsMatchOption" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmsMatchOption() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsMatchOption" /> class.
        /// </summary>
        /// <param name="field">Fields of an SMS object that can be used to filter results (required).</param>
        /// <param name="should">How the value of the email field specified should be compared to the value given in the match options. (required).</param>
        /// <param name="value">The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed. (required).</param>
        public SmsMatchOption(FieldEnum field = default(FieldEnum), ShouldEnum should = default(ShouldEnum), string value = default(string))
        {
            this.Field = field;
            this.Should = should;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for SmsMatchOption and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed.
        /// </summary>
        /// <value>The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed.</value>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmsMatchOption {\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Should: ").Append(Should).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmsMatchOption);
        }

        /// <summary>
        /// Returns true if SmsMatchOption instances are equal
        /// </summary>
        /// <param name="input">Instance of SmsMatchOption to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmsMatchOption input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Should == input.Should ||
                    this.Should.Equals(input.Should)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                hashCode = (hashCode * 59) + this.Should.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SmsDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SmsDto
    /// </summary>
    [DataContract(Name = "SmsDto")]
    public partial class SmsDto : IEquatable<SmsDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SmsDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SmsDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="fromNumber">fromNumber (required).</param>
        /// <param name="body">body (required).</param>
        /// <param name="read">read (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public SmsDto(Guid id = default(Guid), Guid userId = default(Guid), Guid phoneNumber = default(Guid), string fromNumber = default(string), string body = default(string), bool read = default(bool), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.PhoneNumber = phoneNumber;
            // to ensure "fromNumber" is required (not null)
            if (fromNumber == null)
            {
                throw new ArgumentNullException("fromNumber is a required property for SmsDto and cannot be null");
            }
            this.FromNumber = fromNumber;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for SmsDto and cannot be null");
            }
            this.Body = body;
            this.Read = read;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets FromNumber
        /// </summary>
        [DataMember(Name = "fromNumber", IsRequired = true, EmitDefaultValue = true)]
        public string FromNumber { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets Read
        /// </summary>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SmsDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  FromNumber: ").Append(FromNumber).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SmsDto);
        }

        /// <summary>
        /// Returns true if SmsDto instances are equal
        /// </summary>
        /// <param name="input">Instance of SmsDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmsDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.FromNumber == input.FromNumber ||
                    (this.FromNumber != null &&
                    this.FromNumber.Equals(input.FromNumber))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                if (this.FromNumber != null)
                {
                    hashCode = (hashCode * 59) + this.FromNumber.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SimpleSendEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Simplified send email options
    /// </summary>
    [DataContract(Name = "SimpleSendEmailOptions")]
    public partial class SimpleSendEmailOptions : IEquatable<SimpleSendEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SimpleSendEmailOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SimpleSendEmailOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SimpleSendEmailOptions" /> class.
        /// </summary>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending.</param>
        /// <param name="to">Email address to send to (required).</param>
        /// <param name="body">Body of the email message. Supports HTML.</param>
        /// <param name="subject">Subject line of the email.</param>
        public SimpleSendEmailOptions(Guid? senderId = default(Guid?), string to = default(string), string body = default(string), string subject = default(string))
        {
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for SimpleSendEmailOptions and cannot be null");
            }
            this.To = to;
            this.SenderId = senderId;
            this.Body = body;
            this.Subject = subject;
        }

        /// <summary>
        /// ID of inbox to send from. If null an inbox will be created for sending
        /// </summary>
        /// <value>ID of inbox to send from. If null an inbox will be created for sending</value>
        [DataMember(Name = "senderId", EmitDefaultValue = true)]
        public Guid? SenderId { get; set; }

        /// <summary>
        /// Email address to send to
        /// </summary>
        /// <value>Email address to send to</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public string To { get; set; }

        /// <summary>
        /// Body of the email message. Supports HTML
        /// </summary>
        /// <value>Body of the email message. Supports HTML</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Subject line of the email
        /// </summary>
        /// <value>Subject line of the email</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SimpleSendEmailOptions {\n");
            sb.Append("  SenderId: ").Append(SenderId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SimpleSendEmailOptions);
        }

        /// <summary>
        /// Returns true if SimpleSendEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SimpleSendEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SimpleSendEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SenderId == input.SenderId ||
                    (this.SenderId != null &&
                    this.SenderId.Equals(input.SenderId))
                ) && 
                (
                    this.To == input.To ||
                    (this.To != null &&
                    this.To.Equals(input.To))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SenderId != null)
                {
                    hashCode = (hashCode * 59) + this.SenderId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SetInboxFavouritedOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for setting inbox favourite state
    /// </summary>
    [DataContract(Name = "SetInboxFavouritedOptions")]
    public partial class SetInboxFavouritedOptions : IEquatable<SetInboxFavouritedOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SetInboxFavouritedOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SetInboxFavouritedOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SetInboxFavouritedOptions" /> class.
        /// </summary>
        /// <param name="state">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (required).</param>
        public SetInboxFavouritedOptions(bool state = default(bool))
        {
            this.State = state;
        }

        /// <summary>
        /// Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "state", IsRequired = true, EmitDefaultValue = true)]
        public bool State { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SetInboxFavouritedOptions {\n");
            sb.Append("  State: ").Append(State).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SetInboxFavouritedOptions);
        }

        /// <summary>
        /// Returns true if SetInboxFavouritedOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SetInboxFavouritedOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SetInboxFavouritedOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.State == input.State ||
                    this.State.Equals(input.State)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.State.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ServerEndpoints.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ServerEndpoints
    /// </summary>
    [DataContract(Name = "ServerEndpoints")]
    public partial class ServerEndpoints : IEquatable<ServerEndpoints>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerEndpoints" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ServerEndpoints() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerEndpoints" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        /// <param name="port">port (required).</param>
        /// <param name="tls">tls (required).</param>
        /// <param name="altPorts">altPorts (required).</param>
        public ServerEndpoints(string host = default(string), int port = default(int), bool tls = default(bool), List<int> altPorts = default(List<int>))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for ServerEndpoints and cannot be null");
            }
            this.Host = host;
            this.Port = port;
            this.Tls = tls;
            // to ensure "altPorts" is required (not null)
            if (altPorts == null)
            {
                throw new ArgumentNullException("altPorts is a required property for ServerEndpoints and cannot be null");
            }
            this.AltPorts = altPorts;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Gets or Sets Port
        /// </summary>
        [DataMember(Name = "port", IsRequired = true, EmitDefaultValue = true)]
        public int Port { get; set; }

        /// <summary>
        /// Gets or Sets Tls
        /// </summary>
        [DataMember(Name = "tls", IsRequired = true, EmitDefaultValue = true)]
        public bool Tls { get; set; }

        /// <summary>
        /// Gets or Sets AltPorts
        /// </summary>
        [DataMember(Name = "altPorts", IsRequired = true, EmitDefaultValue = true)]
        public List<int> AltPorts { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ServerEndpoints {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("  Port: ").Append(Port).Append("\n");
            sb.Append("  Tls: ").Append(Tls).Append("\n");
            sb.Append("  AltPorts: ").Append(AltPorts).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ServerEndpoints);
        }

        /// <summary>
        /// Returns true if ServerEndpoints instances are equal
        /// </summary>
        /// <param name="input">Instance of ServerEndpoints to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ServerEndpoints input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                ) && 
                (
                    this.Port == input.Port ||
                    this.Port.Equals(input.Port)
                ) && 
                (
                    this.Tls == input.Tls ||
                    this.Tls.Equals(input.Tls)
                ) && 
                (
                    this.AltPorts == input.AltPorts ||
                    this.AltPorts != null &&
                    input.AltPorts != null &&
                    this.AltPorts.SequenceEqual(input.AltPorts)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Port.GetHashCode();
                hashCode = (hashCode * 59) + this.Tls.GetHashCode();
                if (this.AltPorts != null)
                {
                    hashCode = (hashCode * 59) + this.AltPorts.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SentSmsDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SentSmsDto
    /// </summary>
    [DataContract(Name = "SentSmsDto")]
    public partial class SentSmsDto : IEquatable<SentSmsDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SentSmsDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SentSmsDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SentSmsDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="fromNumber">fromNumber (required).</param>
        /// <param name="toNumber">toNumber (required).</param>
        /// <param name="body">body (required).</param>
        /// <param name="sid">sid (required).</param>
        /// <param name="replyToSid">replyToSid (required).</param>
        /// <param name="replyToId">replyToId (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public SentSmsDto(Guid id = default(Guid), Guid userId = default(Guid), Guid phoneNumber = default(Guid), string fromNumber = default(string), string toNumber = default(string), string body = default(string), string sid = default(string), string replyToSid = default(string), Guid replyToId = default(Guid), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.PhoneNumber = phoneNumber;
            // to ensure "fromNumber" is required (not null)
            if (fromNumber == null)
            {
                throw new ArgumentNullException("fromNumber is a required property for SentSmsDto and cannot be null");
            }
            this.FromNumber = fromNumber;
            // to ensure "toNumber" is required (not null)
            if (toNumber == null)
            {
                throw new ArgumentNullException("toNumber is a required property for SentSmsDto and cannot be null");
            }
            this.ToNumber = toNumber;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for SentSmsDto and cannot be null");
            }
            this.Body = body;
            // to ensure "sid" is required (not null)
            if (sid == null)
            {
                throw new ArgumentNullException("sid is a required property for SentSmsDto and cannot be null");
            }
            this.Sid = sid;
            // to ensure "replyToSid" is required (not null)
            if (replyToSid == null)
            {
                throw new ArgumentNullException("replyToSid is a required property for SentSmsDto and cannot be null");
            }
            this.ReplyToSid = replyToSid;
            this.ReplyToId = replyToId;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets FromNumber
        /// </summary>
        [DataMember(Name = "fromNumber", IsRequired = true, EmitDefaultValue = true)]
        public string FromNumber { get; set; }

        /// <summary>
        /// Gets or Sets ToNumber
        /// </summary>
        [DataMember(Name = "toNumber", IsRequired = true, EmitDefaultValue = true)]
        public string ToNumber { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets Sid
        /// </summary>
        [DataMember(Name = "sid", IsRequired = true, EmitDefaultValue = true)]
        public string Sid { get; set; }

        /// <summary>
        /// Gets or Sets ReplyToSid
        /// </summary>
        [DataMember(Name = "replyToSid", IsRequired = true, EmitDefaultValue = true)]
        public string ReplyToSid { get; set; }

        /// <summary>
        /// Gets or Sets ReplyToId
        /// </summary>
        [DataMember(Name = "replyToId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ReplyToId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SentSmsDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  FromNumber: ").Append(FromNumber).Append("\n");
            sb.Append("  ToNumber: ").Append(ToNumber).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Sid: ").Append(Sid).Append("\n");
            sb.Append("  ReplyToSid: ").Append(ReplyToSid).Append("\n");
            sb.Append("  ReplyToId: ").Append(ReplyToId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SentSmsDto);
        }

        /// <summary>
        /// Returns true if SentSmsDto instances are equal
        /// </summary>
        /// <param name="input">Instance of SentSmsDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SentSmsDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.FromNumber == input.FromNumber ||
                    (this.FromNumber != null &&
                    this.FromNumber.Equals(input.FromNumber))
                ) && 
                (
                    this.ToNumber == input.ToNumber ||
                    (this.ToNumber != null &&
                    this.ToNumber.Equals(input.ToNumber))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Sid == input.Sid ||
                    (this.Sid != null &&
                    this.Sid.Equals(input.Sid))
                ) && 
                (
                    this.ReplyToSid == input.ReplyToSid ||
                    (this.ReplyToSid != null &&
                    this.ReplyToSid.Equals(input.ReplyToSid))
                ) && 
                (
                    this.ReplyToId == input.ReplyToId ||
                    (this.ReplyToId != null &&
                    this.ReplyToId.Equals(input.ReplyToId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                if (this.FromNumber != null)
                {
                    hashCode = (hashCode * 59) + this.FromNumber.GetHashCode();
                }
                if (this.ToNumber != null)
                {
                    hashCode = (hashCode * 59) + this.ToNumber.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.Sid != null)
                {
                    hashCode = (hashCode * 59) + this.Sid.GetHashCode();
                }
                if (this.ReplyToSid != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyToSid.GetHashCode();
                }
                if (this.ReplyToId != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyToId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SentEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SentEmailProjection
    /// </summary>
    [DataContract(Name = "SentEmailProjection")]
    public partial class SentEmailProjection : IEquatable<SentEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SentEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="id">id (required).</param>
        /// <param name="from">from.</param>
        /// <param name="subject">subject.</param>
        /// <param name="attachments">attachments (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="to">to (required).</param>
        /// <param name="bcc">bcc (required).</param>
        /// <param name="cc">cc (required).</param>
        /// <param name="bodyMD5Hash">bodyMD5Hash.</param>
        /// <param name="virtualSend">virtualSend (required).</param>
        public SentEmailProjection(DateTime createdAt = default(DateTime), Guid id = default(Guid), string from = default(string), string subject = default(string), List<string> attachments = default(List<string>), Guid inboxId = default(Guid), Guid userId = default(Guid), List<string> to = default(List<string>), List<string> bcc = default(List<string>), List<string> cc = default(List<string>), string bodyMD5Hash = default(string), bool virtualSend = default(bool))
        {
            this.CreatedAt = createdAt;
            this.Id = id;
            // to ensure "attachments" is required (not null)
            if (attachments == null)
            {
                throw new ArgumentNullException("attachments is a required property for SentEmailProjection and cannot be null");
            }
            this.Attachments = attachments;
            this.InboxId = inboxId;
            this.UserId = userId;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for SentEmailProjection and cannot be null");
            }
            this.To = to;
            // to ensure "bcc" is required (not null)
            if (bcc == null)
            {
                throw new ArgumentNullException("bcc is a required property for SentEmailProjection and cannot be null");
            }
            this.Bcc = bcc;
            // to ensure "cc" is required (not null)
            if (cc == null)
            {
                throw new ArgumentNullException("cc is a required property for SentEmailProjection and cannot be null");
            }
            this.Cc = cc;
            this.VirtualSend = virtualSend;
            this.From = from;
            this.Subject = subject;
            this.BodyMD5Hash = bodyMD5Hash;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = false)]
        public string From { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Attachments
        /// </summary>
        [DataMember(Name = "attachments", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets To
        /// </summary>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Gets or Sets Bcc
        /// </summary>
        [DataMember(Name = "bcc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Gets or Sets Cc
        /// </summary>
        [DataMember(Name = "cc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Gets or Sets BodyMD5Hash
        /// </summary>
        [DataMember(Name = "bodyMD5Hash", EmitDefaultValue = false)]
        public string BodyMD5Hash { get; set; }

        /// <summary>
        /// Gets or Sets VirtualSend
        /// </summary>
        [DataMember(Name = "virtualSend", IsRequired = true, EmitDefaultValue = true)]
        public bool VirtualSend { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SentEmailProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  BodyMD5Hash: ").Append(BodyMD5Hash).Append("\n");
            sb.Append("  VirtualSend: ").Append(VirtualSend).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SentEmailProjection);
        }

        /// <summary>
        /// Returns true if SentEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of SentEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SentEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.BodyMD5Hash == input.BodyMD5Hash ||
                    (this.BodyMD5Hash != null &&
                    this.BodyMD5Hash.Equals(input.BodyMD5Hash))
                ) && 
                (
                    this.VirtualSend == input.VirtualSend ||
                    this.VirtualSend.Equals(input.VirtualSend)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.BodyMD5Hash != null)
                {
                    hashCode = (hashCode * 59) + this.BodyMD5Hash.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.VirtualSend.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SentEmailDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Sent email details
    /// </summary>
    [DataContract(Name = "SentEmailDto")]
    public partial class SentEmailDto : IEquatable<SentEmailDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SentEmailDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailDto" /> class.
        /// </summary>
        /// <param name="id">ID of sent email (required).</param>
        /// <param name="userId">User ID (required).</param>
        /// <param name="inboxId">Inbox ID email was sent from (required).</param>
        /// <param name="domainId">Domain ID.</param>
        /// <param name="to">Recipients email was sent to.</param>
        /// <param name="from">Sent from address.</param>
        /// <param name="replyTo">replyTo.</param>
        /// <param name="cc">cc.</param>
        /// <param name="bcc">bcc.</param>
        /// <param name="attachments">Array of IDs of attachments that were sent with this email.</param>
        /// <param name="subject">subject.</param>
        /// <param name="bodyMD5Hash">MD5 Hash.</param>
        /// <param name="body">Sent email body.</param>
        /// <param name="toContacts">toContacts.</param>
        /// <param name="toGroup">toGroup.</param>
        /// <param name="charset">charset.</param>
        /// <param name="isHTML">isHTML.</param>
        /// <param name="sentAt">sentAt (required).</param>
        /// <param name="pixelIds">pixelIds.</param>
        /// <param name="messageId">messageId.</param>
        /// <param name="messageIds">messageIds.</param>
        /// <param name="virtualSend">virtualSend.</param>
        /// <param name="templateId">templateId.</param>
        /// <param name="templateVariables">templateVariables.</param>
        /// <param name="headers">headers.</param>
        /// <param name="html">html.</param>
        public SentEmailDto(Guid id = default(Guid), Guid userId = default(Guid), Guid inboxId = default(Guid), Guid? domainId = default(Guid?), List<string> to = default(List<string>), string from = default(string), string replyTo = default(string), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), List<string> attachments = default(List<string>), string subject = default(string), string bodyMD5Hash = default(string), string body = default(string), List<Guid?> toContacts = default(List<Guid?>), Guid? toGroup = default(Guid?), string charset = default(string), bool? isHTML = default(bool?), DateTime sentAt = default(DateTime), List<Guid?> pixelIds = default(List<Guid?>), string messageId = default(string), List<string> messageIds = default(List<string>), bool? virtualSend = default(bool?), Guid? templateId = default(Guid?), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>), Dictionary<string, string> headers = default(Dictionary<string, string>), bool html = default(bool))
        {
            this.Id = id;
            this.UserId = userId;
            this.InboxId = inboxId;
            this.SentAt = sentAt;
            this.DomainId = domainId;
            this.To = to;
            this.From = from;
            this.ReplyTo = replyTo;
            this.Cc = cc;
            this.Bcc = bcc;
            this.Attachments = attachments;
            this.Subject = subject;
            this.BodyMD5Hash = bodyMD5Hash;
            this.Body = body;
            this.ToContacts = toContacts;
            this.ToGroup = toGroup;
            this.Charset = charset;
            this.IsHTML = isHTML;
            this.PixelIds = pixelIds;
            this.MessageId = messageId;
            this.MessageIds = messageIds;
            this.VirtualSend = virtualSend;
            this.TemplateId = templateId;
            this.TemplateVariables = templateVariables;
            this.Headers = headers;
            this.Html = html;
        }

        /// <summary>
        /// ID of sent email
        /// </summary>
        /// <value>ID of sent email</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// User ID
        /// </summary>
        /// <value>User ID</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Inbox ID email was sent from
        /// </summary>
        /// <value>Inbox ID email was sent from</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Domain ID
        /// </summary>
        /// <value>Domain ID</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Recipients email was sent to
        /// </summary>
        /// <value>Recipients email was sent to</value>
        [DataMember(Name = "to", EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Sent from address
        /// </summary>
        /// <value>Sent from address</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Gets or Sets ReplyTo
        /// </summary>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Gets or Sets Cc
        /// </summary>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Gets or Sets Bcc
        /// </summary>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Array of IDs of attachments that were sent with this email
        /// </summary>
        /// <value>Array of IDs of attachments that were sent with this email</value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// MD5 Hash
        /// </summary>
        /// <value>MD5 Hash</value>
        [DataMember(Name = "bodyMD5Hash", EmitDefaultValue = true)]
        public string BodyMD5Hash { get; set; }

        /// <summary>
        /// Sent email body
        /// </summary>
        /// <value>Sent email body</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets ToContacts
        /// </summary>
        [DataMember(Name = "toContacts", EmitDefaultValue = true)]
        public List<Guid?> ToContacts { get; set; }

        /// <summary>
        /// Gets or Sets ToGroup
        /// </summary>
        [DataMember(Name = "toGroup", EmitDefaultValue = true)]
        public Guid? ToGroup { get; set; }

        /// <summary>
        /// Gets or Sets Charset
        /// </summary>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Gets or Sets IsHTML
        /// </summary>
        [DataMember(Name = "isHTML", EmitDefaultValue = true)]
        public bool? IsHTML { get; set; }

        /// <summary>
        /// Gets or Sets SentAt
        /// </summary>
        [DataMember(Name = "sentAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime SentAt { get; set; }

        /// <summary>
        /// Gets or Sets PixelIds
        /// </summary>
        [DataMember(Name = "pixelIds", EmitDefaultValue = true)]
        public List<Guid?> PixelIds { get; set; }

        /// <summary>
        /// Gets or Sets MessageId
        /// </summary>
        [DataMember(Name = "messageId", EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// Gets or Sets MessageIds
        /// </summary>
        [DataMember(Name = "messageIds", EmitDefaultValue = true)]
        public List<string> MessageIds { get; set; }

        /// <summary>
        /// Gets or Sets VirtualSend
        /// </summary>
        [DataMember(Name = "virtualSend", EmitDefaultValue = true)]
        public bool? VirtualSend { get; set; }

        /// <summary>
        /// Gets or Sets TemplateId
        /// </summary>
        [DataMember(Name = "templateId", EmitDefaultValue = true)]
        public Guid? TemplateId { get; set; }

        /// <summary>
        /// Gets or Sets TemplateVariables
        /// </summary>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Gets or Sets Headers
        /// </summary>
        [DataMember(Name = "headers", EmitDefaultValue = true)]
        public Dictionary<string, string> Headers { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", EmitDefaultValue = true)]
        public bool Html { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SentEmailDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  BodyMD5Hash: ").Append(BodyMD5Hash).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  ToContacts: ").Append(ToContacts).Append("\n");
            sb.Append("  ToGroup: ").Append(ToGroup).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  SentAt: ").Append(SentAt).Append("\n");
            sb.Append("  PixelIds: ").Append(PixelIds).Append("\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  MessageIds: ").Append(MessageIds).Append("\n");
            sb.Append("  VirtualSend: ").Append(VirtualSend).Append("\n");
            sb.Append("  TemplateId: ").Append(TemplateId).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("  Headers: ").Append(Headers).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SentEmailDto);
        }

        /// <summary>
        /// Returns true if SentEmailDto instances are equal
        /// </summary>
        /// <param name="input">Instance of SentEmailDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SentEmailDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.BodyMD5Hash == input.BodyMD5Hash ||
                    (this.BodyMD5Hash != null &&
                    this.BodyMD5Hash.Equals(input.BodyMD5Hash))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.ToContacts == input.ToContacts ||
                    this.ToContacts != null &&
                    input.ToContacts != null &&
                    this.ToContacts.SequenceEqual(input.ToContacts)
                ) && 
                (
                    this.ToGroup == input.ToGroup ||
                    (this.ToGroup != null &&
                    this.ToGroup.Equals(input.ToGroup))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    (this.IsHTML != null &&
                    this.IsHTML.Equals(input.IsHTML))
                ) && 
                (
                    this.SentAt == input.SentAt ||
                    (this.SentAt != null &&
                    this.SentAt.Equals(input.SentAt))
                ) && 
                (
                    this.PixelIds == input.PixelIds ||
                    this.PixelIds != null &&
                    input.PixelIds != null &&
                    this.PixelIds.SequenceEqual(input.PixelIds)
                ) && 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.MessageIds == input.MessageIds ||
                    this.MessageIds != null &&
                    input.MessageIds != null &&
                    this.MessageIds.SequenceEqual(input.MessageIds)
                ) && 
                (
                    this.VirtualSend == input.VirtualSend ||
                    (this.VirtualSend != null &&
                    this.VirtualSend.Equals(input.VirtualSend))
                ) && 
                (
                    this.TemplateId == input.TemplateId ||
                    (this.TemplateId != null &&
                    this.TemplateId.Equals(input.TemplateId))
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                ) && 
                (
                    this.Headers == input.Headers ||
                    this.Headers != null &&
                    input.Headers != null &&
                    this.Headers.SequenceEqual(input.Headers)
                ) && 
                (
                    this.Html == input.Html ||
                    this.Html.Equals(input.Html)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.BodyMD5Hash != null)
                {
                    hashCode = (hashCode * 59) + this.BodyMD5Hash.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.ToContacts != null)
                {
                    hashCode = (hashCode * 59) + this.ToContacts.GetHashCode();
                }
                if (this.ToGroup != null)
                {
                    hashCode = (hashCode * 59) + this.ToGroup.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.IsHTML != null)
                {
                    hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                }
                if (this.SentAt != null)
                {
                    hashCode = (hashCode * 59) + this.SentAt.GetHashCode();
                }
                if (this.PixelIds != null)
                {
                    hashCode = (hashCode * 59) + this.PixelIds.GetHashCode();
                }
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.MessageIds != null)
                {
                    hashCode = (hashCode * 59) + this.MessageIds.GetHashCode();
                }
                if (this.VirtualSend != null)
                {
                    hashCode = (hashCode * 59) + this.VirtualSend.GetHashCode();
                }
                if (this.TemplateId != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateId.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                if (this.Headers != null)
                {
                    hashCode = (hashCode * 59) + this.Headers.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Html.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/Sender.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Sender object containing from email address and from personal name if provided in address
    /// </summary>
    [DataContract(Name = "Sender")]
    public partial class Sender : IEquatable<Sender>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Sender" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected Sender() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="Sender" /> class.
        /// </summary>
        /// <param name="rawValue">rawValue (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="name">name.</param>
        public Sender(string rawValue = default(string), string emailAddress = default(string), string name = default(string))
        {
            // to ensure "rawValue" is required (not null)
            if (rawValue == null)
            {
                throw new ArgumentNullException("rawValue is a required property for Sender and cannot be null");
            }
            this.RawValue = rawValue;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for Sender and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets RawValue
        /// </summary>
        [DataMember(Name = "rawValue", IsRequired = true, EmitDefaultValue = true)]
        public string RawValue { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class Sender {\n");
            sb.Append("  RawValue: ").Append(RawValue).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as Sender);
        }

        /// <summary>
        /// Returns true if Sender instances are equal
        /// </summary>
        /// <param name="input">Instance of Sender to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Sender input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RawValue == input.RawValue ||
                    (this.RawValue != null &&
                    this.RawValue.Equals(input.RawValue))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RawValue != null)
                {
                    hashCode = (hashCode * 59) + this.RawValue.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SendWithQueueResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SendWithQueueResult
    /// </summary>
    [DataContract(Name = "SendWithQueueResult")]
    public partial class SendWithQueueResult : IEquatable<SendWithQueueResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SendWithQueueResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SendWithQueueResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SendWithQueueResult" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="subject">subject.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="headerId">headerId (required).</param>
        /// <param name="delivered">delivered (required).</param>
        /// <param name="exceptionName">exceptionName.</param>
        /// <param name="message">message.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public SendWithQueueResult(Guid id = default(Guid), Guid userId = default(Guid), string subject = default(string), Guid inboxId = default(Guid), string headerId = default(string), bool delivered = default(bool), string exceptionName = default(string), string message = default(string), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "headerId" is required (not null)
            if (headerId == null)
            {
                throw new ArgumentNullException("headerId is a required property for SendWithQueueResult and cannot be null");
            }
            this.HeaderId = headerId;
            this.Delivered = delivered;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Subject = subject;
            this.InboxId = inboxId;
            this.ExceptionName = exceptionName;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = false)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets HeaderId
        /// </summary>
        [DataMember(Name = "headerId", IsRequired = true, EmitDefaultValue = true)]
        public string HeaderId { get; set; }

        /// <summary>
        /// Gets or Sets Delivered
        /// </summary>
        [DataMember(Name = "delivered", IsRequired = true, EmitDefaultValue = true)]
        public bool Delivered { get; set; }

        /// <summary>
        /// Gets or Sets ExceptionName
        /// </summary>
        [DataMember(Name = "exceptionName", EmitDefaultValue = false)]
        public string ExceptionName { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SendWithQueueResult {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  HeaderId: ").Append(HeaderId).Append("\n");
            sb.Append("  Delivered: ").Append(Delivered).Append("\n");
            sb.Append("  ExceptionName: ").Append(ExceptionName).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SendWithQueueResult);
        }

        /// <summary>
        /// Returns true if SendWithQueueResult instances are equal
        /// </summary>
        /// <param name="input">Instance of SendWithQueueResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SendWithQueueResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.HeaderId == input.HeaderId ||
                    (this.HeaderId != null &&
                    this.HeaderId.Equals(input.HeaderId))
                ) && 
                (
                    this.Delivered == input.Delivered ||
                    this.Delivered.Equals(input.Delivered)
                ) && 
                (
                    this.ExceptionName == input.ExceptionName ||
                    (this.ExceptionName != null &&
                    this.ExceptionName.Equals(input.ExceptionName))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.HeaderId != null)
                {
                    hashCode = (hashCode * 59) + this.HeaderId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Delivered.GetHashCode();
                if (this.ExceptionName != null)
                {
                    hashCode = (hashCode * 59) + this.ExceptionName.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SendSMTPEnvelopeOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for the email envelope
    /// </summary>
    [DataContract(Name = "SendSMTPEnvelopeOptions")]
    public partial class SendSMTPEnvelopeOptions : IEquatable<SendSMTPEnvelopeOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SendSMTPEnvelopeOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SendSMTPEnvelopeOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SendSMTPEnvelopeOptions" /> class.
        /// </summary>
        /// <param name="rcptTo">rcptTo (required).</param>
        /// <param name="mailFrom">mailFrom (required).</param>
        /// <param name="data">data (required).</param>
        public SendSMTPEnvelopeOptions(List<string> rcptTo = default(List<string>), string mailFrom = default(string), string data = default(string))
        {
            // to ensure "rcptTo" is required (not null)
            if (rcptTo == null)
            {
                throw new ArgumentNullException("rcptTo is a required property for SendSMTPEnvelopeOptions and cannot be null");
            }
            this.RcptTo = rcptTo;
            // to ensure "mailFrom" is required (not null)
            if (mailFrom == null)
            {
                throw new ArgumentNullException("mailFrom is a required property for SendSMTPEnvelopeOptions and cannot be null");
            }
            this.MailFrom = mailFrom;
            // to ensure "data" is required (not null)
            if (data == null)
            {
                throw new ArgumentNullException("data is a required property for SendSMTPEnvelopeOptions and cannot be null");
            }
            this.Data = data;
        }

        /// <summary>
        /// Gets or Sets RcptTo
        /// </summary>
        [DataMember(Name = "rcptTo", IsRequired = true, EmitDefaultValue = true)]
        public List<string> RcptTo { get; set; }

        /// <summary>
        /// Gets or Sets MailFrom
        /// </summary>
        [DataMember(Name = "mailFrom", IsRequired = true, EmitDefaultValue = true)]
        public string MailFrom { get; set; }

        /// <summary>
        /// Gets or Sets Data
        /// </summary>
        [DataMember(Name = "data", IsRequired = true, EmitDefaultValue = true)]
        public string Data { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SendSMTPEnvelopeOptions {\n");
            sb.Append("  RcptTo: ").Append(RcptTo).Append("\n");
            sb.Append("  MailFrom: ").Append(MailFrom).Append("\n");
            sb.Append("  Data: ").Append(Data).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SendSMTPEnvelopeOptions);
        }

        /// <summary>
        /// Returns true if SendSMTPEnvelopeOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SendSMTPEnvelopeOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SendSMTPEnvelopeOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RcptTo == input.RcptTo ||
                    this.RcptTo != null &&
                    input.RcptTo != null &&
                    this.RcptTo.SequenceEqual(input.RcptTo)
                ) && 
                (
                    this.MailFrom == input.MailFrom ||
                    (this.MailFrom != null &&
                    this.MailFrom.Equals(input.MailFrom))
                ) && 
                (
                    this.Data == input.Data ||
                    (this.Data != null &&
                    this.Data.Equals(input.Data))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RcptTo != null)
                {
                    hashCode = (hashCode * 59) + this.RcptTo.GetHashCode();
                }
                if (this.MailFrom != null)
                {
                    hashCode = (hashCode * 59) + this.MailFrom.GetHashCode();
                }
                if (this.Data != null)
                {
                    hashCode = (hashCode * 59) + this.Data.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SendEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for the email to be sent
    /// </summary>
    [DataContract(Name = "SendEmailOptions")]
    public partial class SendEmailOptions : IEquatable<SendEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SendStrategyEnum
        {
            /// <summary>
            /// Enum SINGLEMESSAGE for value: SINGLE_MESSAGE
            /// </summary>
            [EnumMember(Value = "SINGLE_MESSAGE")]
            SINGLEMESSAGE = 1

        }


        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [DataMember(Name = "sendStrategy", EmitDefaultValue = true)]
        public SendStrategyEnum? SendStrategy { get; set; }
        /// <summary>
        /// Validate recipient email addresses before sending
        /// </summary>
        /// <value>Validate recipient email addresses before sending</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ValidateEmailAddressesEnum
        {
            /// <summary>
            /// Enum VALIDATEFILTERREMOVEINVALID for value: VALIDATE_FILTER_REMOVE_INVALID
            /// </summary>
            [EnumMember(Value = "VALIDATE_FILTER_REMOVE_INVALID")]
            VALIDATEFILTERREMOVEINVALID = 1,

            /// <summary>
            /// Enum VALIDATEERRORIFINVALID for value: VALIDATE_ERROR_IF_INVALID
            /// </summary>
            [EnumMember(Value = "VALIDATE_ERROR_IF_INVALID")]
            VALIDATEERRORIFINVALID = 2,

            /// <summary>
            /// Enum NOVALIDATION for value: NO_VALIDATION
            /// </summary>
            [EnumMember(Value = "NO_VALIDATION")]
            NOVALIDATION = 3

        }


        /// <summary>
        /// Validate recipient email addresses before sending
        /// </summary>
        /// <value>Validate recipient email addresses before sending</value>
        [DataMember(Name = "validateEmailAddresses", EmitDefaultValue = true)]
        public ValidateEmailAddressesEnum? ValidateEmailAddresses { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="SendEmailOptions" /> class.
        /// </summary>
        /// <param name="toContacts">Optional list of contact IDs to send email to. Manage your contacts via the API or dashboard. When contacts are used the email is sent to each contact separately so they will not see other recipients..</param>
        /// <param name="toGroup">Optional contact group ID to send email to. You can create contacts and contact groups in the API or dashboard and use them for email campaigns. When contact groups are used the email is sent to each contact separately so they will not see other recipients.</param>
        /// <param name="to">List of destination email addresses. Each email address must be RFC 5322 format. Even single recipients must be in array form. Maximum recipients per email depends on your plan. If you need to send many emails try using contacts or contact groups or use a non standard sendStrategy to ensure that spam filters are not triggered (many recipients in one email can affect your spam rating). Be cautious when sending emails that your recipients exist. High bounce rates (meaning a high percentage of emails cannot be delivered because an address does not exist) can result in account freezing..</param>
        /// <param name="from">Optional from address. Email address is RFC 5322 format and may include a display name and email in angle brackets (&#x60;my@address.com&#x60; or &#x60;My inbox &lt;my@address.com&gt;&#x60;). If no sender is set the source inbox address will be used for this field. If you set &#x60;useInboxName&#x60; to &#x60;true&#x60; the from field will include the inbox name as a display name: &#x60;inbox_name &lt;inbox@address.com&gt;&#x60;. For this to work use the name field when creating an inbox. Beware of potential spam penalties when setting the from field to an address not used by the inbox. Your emails may get blocked by services if you impersonate another address. To use a custom email addresses use a custom domain. You can create domains with the DomainController. The domain must be verified in the dashboard before it can be used..</param>
        /// <param name="cc">Optional list of cc destination email addresses.</param>
        /// <param name="bcc">Optional list of bcc destination email addresses.</param>
        /// <param name="subject">Optional email subject line.</param>
        /// <param name="replyTo">Optional replyTo header.</param>
        /// <param name="customHeaders">Optional custom headers.</param>
        /// <param name="body">Optional contents of email. If body contains HTML then set &#x60;isHTML&#x60; to true to ensure that email clients render it correctly. You can use moustache template syntax in the email body in conjunction with &#x60;toGroup&#x60; contact variables or &#x60;templateVariables&#x60; data. If you need more templating control consider creating a template and using the &#x60;template&#x60; property instead of the body..</param>
        /// <param name="html">Optional HTML flag to indicate that contents is HTML. Set&#39;s a &#x60;content-type: text/html&#x60; for email. (Deprecated: use &#x60;isHTML&#x60; instead.).</param>
        /// <param name="isHTML">Optional HTML flag. If true the &#x60;content-type&#x60; of the email will be &#x60;text/html&#x60;. Set to true when sending HTML to ensure proper rending on email clients.</param>
        /// <param name="charset">Optional charset.</param>
        /// <param name="attachments">Optional list of attachment IDs to send with this email. You must first upload each attachment separately via method call or dashboard in order to obtain attachment IDs. This way you can reuse attachments with different emails once uploaded. There are several ways to upload that support &#x60;multi-part form&#x60;, &#x60;base64 file encoding&#x60;, and octet stream binary uploads. See the &#x60;UploadController&#x60; for available methods. .</param>
        /// <param name="templateVariables">Optional map of template variables. Will replace moustache syntax variables in subject and body or template with the associated values if found..</param>
        /// <param name="template">Optional template ID to use for body. Will override body if provided. When using a template make sure you pass the corresponding map of &#x60;templateVariables&#x60;. You can find which variables are needed by fetching the template itself or viewing it in the dashboard..</param>
        /// <param name="sendStrategy">How an email should be sent based on its recipients.</param>
        /// <param name="useInboxName">Use name of inbox as sender email address name. Will construct RFC 5322 email address with &#x60;Inbox name &lt;inbox@address.com&gt;&#x60; if the inbox has a name..</param>
        /// <param name="addTrackingPixel">Add tracking pixel to email.</param>
        /// <param name="filterBouncedRecipients">Filter recipients to remove any bounced recipients from to, bcc, and cc before sending.</param>
        /// <param name="validateEmailAddresses">Validate recipient email addresses before sending.</param>
        /// <param name="ignoreEmptyRecipients">Ignore empty recipients after validation removes all recipients as invalid and fail silently.</param>
        /// <param name="isXAmpHtml">Is content AMP4EMAIL compatible. If set will send as x-amp-html part..</param>
        /// <param name="bodyParts">Email body content parts for multipart mime message. Will override body..</param>
        public SendEmailOptions(List<Guid?> toContacts = default(List<Guid?>), Guid? toGroup = default(Guid?), List<string> to = default(List<string>), string from = default(string), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), string subject = default(string), string replyTo = default(string), Dictionary<string, string> customHeaders = default(Dictionary<string, string>), string body = default(string), bool? html = default(bool?), bool? isHTML = default(bool?), string charset = default(string), List<string> attachments = default(List<string>), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>), Guid? template = default(Guid?), SendStrategyEnum? sendStrategy = default(SendStrategyEnum?), bool? useInboxName = default(bool?), bool? addTrackingPixel = default(bool?), bool? filterBouncedRecipients = default(bool?), ValidateEmailAddressesEnum? validateEmailAddresses = default(ValidateEmailAddressesEnum?), bool? ignoreEmptyRecipients = default(bool?), bool? isXAmpHtml = default(bool?), List<SendEmailBodyPart> bodyParts = default(List<SendEmailBodyPart>))
        {
            this.ToContacts = toContacts;
            this.ToGroup = toGroup;
            this.To = to;
            this.From = from;
            this.Cc = cc;
            this.Bcc = bcc;
            this.Subject = subject;
            this.ReplyTo = replyTo;
            this.CustomHeaders = customHeaders;
            this.Body = body;
            this.Html = html;
            this.IsHTML = isHTML;
            this.Charset = charset;
            this.Attachments = attachments;
            this.TemplateVariables = templateVariables;
            this.Template = template;
            this.SendStrategy = sendStrategy;
            this.UseInboxName = useInboxName;
            this.AddTrackingPixel = addTrackingPixel;
            this.FilterBouncedRecipients = filterBouncedRecipients;
            this.ValidateEmailAddresses = validateEmailAddresses;
            this.IgnoreEmptyRecipients = ignoreEmptyRecipients;
            this.IsXAmpHtml = isXAmpHtml;
            this.BodyParts = bodyParts;
        }

        /// <summary>
        /// Optional list of contact IDs to send email to. Manage your contacts via the API or dashboard. When contacts are used the email is sent to each contact separately so they will not see other recipients.
        /// </summary>
        /// <value>Optional list of contact IDs to send email to. Manage your contacts via the API or dashboard. When contacts are used the email is sent to each contact separately so they will not see other recipients.</value>
        [DataMember(Name = "toContacts", EmitDefaultValue = true)]
        public List<Guid?> ToContacts { get; set; }

        /// <summary>
        /// Optional contact group ID to send email to. You can create contacts and contact groups in the API or dashboard and use them for email campaigns. When contact groups are used the email is sent to each contact separately so they will not see other recipients
        /// </summary>
        /// <value>Optional contact group ID to send email to. You can create contacts and contact groups in the API or dashboard and use them for email campaigns. When contact groups are used the email is sent to each contact separately so they will not see other recipients</value>
        [DataMember(Name = "toGroup", EmitDefaultValue = true)]
        public Guid? ToGroup { get; set; }

        /// <summary>
        /// List of destination email addresses. Each email address must be RFC 5322 format. Even single recipients must be in array form. Maximum recipients per email depends on your plan. If you need to send many emails try using contacts or contact groups or use a non standard sendStrategy to ensure that spam filters are not triggered (many recipients in one email can affect your spam rating). Be cautious when sending emails that your recipients exist. High bounce rates (meaning a high percentage of emails cannot be delivered because an address does not exist) can result in account freezing.
        /// </summary>
        /// <value>List of destination email addresses. Each email address must be RFC 5322 format. Even single recipients must be in array form. Maximum recipients per email depends on your plan. If you need to send many emails try using contacts or contact groups or use a non standard sendStrategy to ensure that spam filters are not triggered (many recipients in one email can affect your spam rating). Be cautious when sending emails that your recipients exist. High bounce rates (meaning a high percentage of emails cannot be delivered because an address does not exist) can result in account freezing.</value>
        [DataMember(Name = "to", EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Optional from address. Email address is RFC 5322 format and may include a display name and email in angle brackets (&#x60;my@address.com&#x60; or &#x60;My inbox &lt;my@address.com&gt;&#x60;). If no sender is set the source inbox address will be used for this field. If you set &#x60;useInboxName&#x60; to &#x60;true&#x60; the from field will include the inbox name as a display name: &#x60;inbox_name &lt;inbox@address.com&gt;&#x60;. For this to work use the name field when creating an inbox. Beware of potential spam penalties when setting the from field to an address not used by the inbox. Your emails may get blocked by services if you impersonate another address. To use a custom email addresses use a custom domain. You can create domains with the DomainController. The domain must be verified in the dashboard before it can be used.
        /// </summary>
        /// <value>Optional from address. Email address is RFC 5322 format and may include a display name and email in angle brackets (&#x60;my@address.com&#x60; or &#x60;My inbox &lt;my@address.com&gt;&#x60;). If no sender is set the source inbox address will be used for this field. If you set &#x60;useInboxName&#x60; to &#x60;true&#x60; the from field will include the inbox name as a display name: &#x60;inbox_name &lt;inbox@address.com&gt;&#x60;. For this to work use the name field when creating an inbox. Beware of potential spam penalties when setting the from field to an address not used by the inbox. Your emails may get blocked by services if you impersonate another address. To use a custom email addresses use a custom domain. You can create domains with the DomainController. The domain must be verified in the dashboard before it can be used.</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Optional list of cc destination email addresses
        /// </summary>
        /// <value>Optional list of cc destination email addresses</value>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Optional list of bcc destination email addresses
        /// </summary>
        /// <value>Optional list of bcc destination email addresses</value>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Optional email subject line
        /// </summary>
        /// <value>Optional email subject line</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Optional replyTo header
        /// </summary>
        /// <value>Optional replyTo header</value>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Optional custom headers
        /// </summary>
        /// <value>Optional custom headers</value>
        [DataMember(Name = "customHeaders", EmitDefaultValue = true)]
        public Dictionary<string, string> CustomHeaders { get; set; }

        /// <summary>
        /// Optional contents of email. If body contains HTML then set &#x60;isHTML&#x60; to true to ensure that email clients render it correctly. You can use moustache template syntax in the email body in conjunction with &#x60;toGroup&#x60; contact variables or &#x60;templateVariables&#x60; data. If you need more templating control consider creating a template and using the &#x60;template&#x60; property instead of the body.
        /// </summary>
        /// <value>Optional contents of email. If body contains HTML then set &#x60;isHTML&#x60; to true to ensure that email clients render it correctly. You can use moustache template syntax in the email body in conjunction with &#x60;toGroup&#x60; contact variables or &#x60;templateVariables&#x60; data. If you need more templating control consider creating a template and using the &#x60;template&#x60; property instead of the body.</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Optional HTML flag to indicate that contents is HTML. Set&#39;s a &#x60;content-type: text/html&#x60; for email. (Deprecated: use &#x60;isHTML&#x60; instead.)
        /// </summary>
        /// <value>Optional HTML flag to indicate that contents is HTML. Set&#39;s a &#x60;content-type: text/html&#x60; for email. (Deprecated: use &#x60;isHTML&#x60; instead.)</value>
        [DataMember(Name = "html", EmitDefaultValue = true)]
        public bool? Html { get; set; }

        /// <summary>
        /// Optional HTML flag. If true the &#x60;content-type&#x60; of the email will be &#x60;text/html&#x60;. Set to true when sending HTML to ensure proper rending on email clients
        /// </summary>
        /// <value>Optional HTML flag. If true the &#x60;content-type&#x60; of the email will be &#x60;text/html&#x60;. Set to true when sending HTML to ensure proper rending on email clients</value>
        [DataMember(Name = "isHTML", EmitDefaultValue = true)]
        public bool? IsHTML { get; set; }

        /// <summary>
        /// Optional charset
        /// </summary>
        /// <value>Optional charset</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Optional list of attachment IDs to send with this email. You must first upload each attachment separately via method call or dashboard in order to obtain attachment IDs. This way you can reuse attachments with different emails once uploaded. There are several ways to upload that support &#x60;multi-part form&#x60;, &#x60;base64 file encoding&#x60;, and octet stream binary uploads. See the &#x60;UploadController&#x60; for available methods. 
        /// </summary>
        /// <value>Optional list of attachment IDs to send with this email. You must first upload each attachment separately via method call or dashboard in order to obtain attachment IDs. This way you can reuse attachments with different emails once uploaded. There are several ways to upload that support &#x60;multi-part form&#x60;, &#x60;base64 file encoding&#x60;, and octet stream binary uploads. See the &#x60;UploadController&#x60; for available methods. </value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Optional map of template variables. Will replace moustache syntax variables in subject and body or template with the associated values if found.
        /// </summary>
        /// <value>Optional map of template variables. Will replace moustache syntax variables in subject and body or template with the associated values if found.</value>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Optional template ID to use for body. Will override body if provided. When using a template make sure you pass the corresponding map of &#x60;templateVariables&#x60;. You can find which variables are needed by fetching the template itself or viewing it in the dashboard.
        /// </summary>
        /// <value>Optional template ID to use for body. Will override body if provided. When using a template make sure you pass the corresponding map of &#x60;templateVariables&#x60;. You can find which variables are needed by fetching the template itself or viewing it in the dashboard.</value>
        [DataMember(Name = "template", EmitDefaultValue = true)]
        public Guid? Template { get; set; }

        /// <summary>
        /// Use name of inbox as sender email address name. Will construct RFC 5322 email address with &#x60;Inbox name &lt;inbox@address.com&gt;&#x60; if the inbox has a name.
        /// </summary>
        /// <value>Use name of inbox as sender email address name. Will construct RFC 5322 email address with &#x60;Inbox name &lt;inbox@address.com&gt;&#x60; if the inbox has a name.</value>
        [DataMember(Name = "useInboxName", EmitDefaultValue = true)]
        public bool? UseInboxName { get; set; }

        /// <summary>
        /// Add tracking pixel to email
        /// </summary>
        /// <value>Add tracking pixel to email</value>
        [DataMember(Name = "addTrackingPixel", EmitDefaultValue = true)]
        public bool? AddTrackingPixel { get; set; }

        /// <summary>
        /// Filter recipients to remove any bounced recipients from to, bcc, and cc before sending
        /// </summary>
        /// <value>Filter recipients to remove any bounced recipients from to, bcc, and cc before sending</value>
        [DataMember(Name = "filterBouncedRecipients", EmitDefaultValue = true)]
        public bool? FilterBouncedRecipients { get; set; }

        /// <summary>
        /// Ignore empty recipients after validation removes all recipients as invalid and fail silently
        /// </summary>
        /// <value>Ignore empty recipients after validation removes all recipients as invalid and fail silently</value>
        [DataMember(Name = "ignoreEmptyRecipients", EmitDefaultValue = true)]
        public bool? IgnoreEmptyRecipients { get; set; }

        /// <summary>
        /// Is content AMP4EMAIL compatible. If set will send as x-amp-html part.
        /// </summary>
        /// <value>Is content AMP4EMAIL compatible. If set will send as x-amp-html part.</value>
        [DataMember(Name = "isXAmpHtml", EmitDefaultValue = true)]
        public bool? IsXAmpHtml { get; set; }

        /// <summary>
        /// Email body content parts for multipart mime message. Will override body.
        /// </summary>
        /// <value>Email body content parts for multipart mime message. Will override body.</value>
        [DataMember(Name = "bodyParts", EmitDefaultValue = true)]
        public List<SendEmailBodyPart> BodyParts { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SendEmailOptions {\n");
            sb.Append("  ToContacts: ").Append(ToContacts).Append("\n");
            sb.Append("  ToGroup: ").Append(ToGroup).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  CustomHeaders: ").Append(CustomHeaders).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("  Template: ").Append(Template).Append("\n");
            sb.Append("  SendStrategy: ").Append(SendStrategy).Append("\n");
            sb.Append("  UseInboxName: ").Append(UseInboxName).Append("\n");
            sb.Append("  AddTrackingPixel: ").Append(AddTrackingPixel).Append("\n");
            sb.Append("  FilterBouncedRecipients: ").Append(FilterBouncedRecipients).Append("\n");
            sb.Append("  ValidateEmailAddresses: ").Append(ValidateEmailAddresses).Append("\n");
            sb.Append("  IgnoreEmptyRecipients: ").Append(IgnoreEmptyRecipients).Append("\n");
            sb.Append("  IsXAmpHtml: ").Append(IsXAmpHtml).Append("\n");
            sb.Append("  BodyParts: ").Append(BodyParts).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SendEmailOptions);
        }

        /// <summary>
        /// Returns true if SendEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SendEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SendEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ToContacts == input.ToContacts ||
                    this.ToContacts != null &&
                    input.ToContacts != null &&
                    this.ToContacts.SequenceEqual(input.ToContacts)
                ) && 
                (
                    this.ToGroup == input.ToGroup ||
                    (this.ToGroup != null &&
                    this.ToGroup.Equals(input.ToGroup))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.CustomHeaders == input.CustomHeaders ||
                    this.CustomHeaders != null &&
                    input.CustomHeaders != null &&
                    this.CustomHeaders.SequenceEqual(input.CustomHeaders)
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Html == input.Html ||
                    (this.Html != null &&
                    this.Html.Equals(input.Html))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    (this.IsHTML != null &&
                    this.IsHTML.Equals(input.IsHTML))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                ) && 
                (
                    this.Template == input.Template ||
                    (this.Template != null &&
                    this.Template.Equals(input.Template))
                ) && 
                (
                    this.SendStrategy == input.SendStrategy ||
                    this.SendStrategy.Equals(input.SendStrategy)
                ) && 
                (
                    this.UseInboxName == input.UseInboxName ||
                    (this.UseInboxName != null &&
                    this.UseInboxName.Equals(input.UseInboxName))
                ) && 
                (
                    this.AddTrackingPixel == input.AddTrackingPixel ||
                    (this.AddTrackingPixel != null &&
                    this.AddTrackingPixel.Equals(input.AddTrackingPixel))
                ) && 
                (
                    this.FilterBouncedRecipients == input.FilterBouncedRecipients ||
                    (this.FilterBouncedRecipients != null &&
                    this.FilterBouncedRecipients.Equals(input.FilterBouncedRecipients))
                ) && 
                (
                    this.ValidateEmailAddresses == input.ValidateEmailAddresses ||
                    this.ValidateEmailAddresses.Equals(input.ValidateEmailAddresses)
                ) && 
                (
                    this.IgnoreEmptyRecipients == input.IgnoreEmptyRecipients ||
                    (this.IgnoreEmptyRecipients != null &&
                    this.IgnoreEmptyRecipients.Equals(input.IgnoreEmptyRecipients))
                ) && 
                (
                    this.IsXAmpHtml == input.IsXAmpHtml ||
                    (this.IsXAmpHtml != null &&
                    this.IsXAmpHtml.Equals(input.IsXAmpHtml))
                ) && 
                (
                    this.BodyParts == input.BodyParts ||
                    this.BodyParts != null &&
                    input.BodyParts != null &&
                    this.BodyParts.SequenceEqual(input.BodyParts)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ToContacts != null)
                {
                    hashCode = (hashCode * 59) + this.ToContacts.GetHashCode();
                }
                if (this.ToGroup != null)
                {
                    hashCode = (hashCode * 59) + this.ToGroup.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.CustomHeaders != null)
                {
                    hashCode = (hashCode * 59) + this.CustomHeaders.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.Html != null)
                {
                    hashCode = (hashCode * 59) + this.Html.GetHashCode();
                }
                if (this.IsHTML != null)
                {
                    hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                if (this.Template != null)
                {
                    hashCode = (hashCode * 59) + this.Template.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SendStrategy.GetHashCode();
                if (this.UseInboxName != null)
                {
                    hashCode = (hashCode * 59) + this.UseInboxName.GetHashCode();
                }
                if (this.AddTrackingPixel != null)
                {
                    hashCode = (hashCode * 59) + this.AddTrackingPixel.GetHashCode();
                }
                if (this.FilterBouncedRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.FilterBouncedRecipients.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ValidateEmailAddresses.GetHashCode();
                if (this.IgnoreEmptyRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreEmptyRecipients.GetHashCode();
                }
                if (this.IsXAmpHtml != null)
                {
                    hashCode = (hashCode * 59) + this.IsXAmpHtml.GetHashCode();
                }
                if (this.BodyParts != null)
                {
                    hashCode = (hashCode * 59) + this.BodyParts.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SendEmailBodyPart.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email body content parts for multipart mime message. Will override body.
    /// </summary>
    [DataContract(Name = "SendEmailBodyPart")]
    public partial class SendEmailBodyPart : IEquatable<SendEmailBodyPart>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="SendEmailBodyPart" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected SendEmailBodyPart() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="SendEmailBodyPart" /> class.
        /// </summary>
        /// <param name="contentType">contentType (required).</param>
        /// <param name="contentBody">contentBody (required).</param>
        public SendEmailBodyPart(string contentType = default(string), string contentBody = default(string))
        {
            // to ensure "contentType" is required (not null)
            if (contentType == null)
            {
                throw new ArgumentNullException("contentType is a required property for SendEmailBodyPart and cannot be null");
            }
            this.ContentType = contentType;
            // to ensure "contentBody" is required (not null)
            if (contentBody == null)
            {
                throw new ArgumentNullException("contentBody is a required property for SendEmailBodyPart and cannot be null");
            }
            this.ContentBody = contentBody;
        }

        /// <summary>
        /// Gets or Sets ContentType
        /// </summary>
        [DataMember(Name = "contentType", IsRequired = true, EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Gets or Sets ContentBody
        /// </summary>
        [DataMember(Name = "contentBody", IsRequired = true, EmitDefaultValue = true)]
        public string ContentBody { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SendEmailBodyPart {\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  ContentBody: ").Append(ContentBody).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SendEmailBodyPart);
        }

        /// <summary>
        /// Returns true if SendEmailBodyPart instances are equal
        /// </summary>
        /// <param name="input">Instance of SendEmailBodyPart to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SendEmailBodyPart input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.ContentBody == input.ContentBody ||
                    (this.ContentBody != null &&
                    this.ContentBody.Equals(input.ContentBody))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                if (this.ContentBody != null)
                {
                    hashCode = (hashCode * 59) + this.ContentBody.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SearchInboxesOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SearchInboxesOptions
    /// </summary>
    [DataContract(Name = "SearchInboxesOptions")]
    public partial class SearchInboxesOptions : IEquatable<SearchInboxesOptions>, IValidatableObject
    {
        /// <summary>
        /// Optional createdAt sort direction ASC or DESC
        /// </summary>
        /// <value>Optional createdAt sort direction ASC or DESC</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SortDirectionEnum
        {
            /// <summary>
            /// Enum ASC for value: ASC
            /// </summary>
            [EnumMember(Value = "ASC")]
            ASC = 1,

            /// <summary>
            /// Enum DESC for value: DESC
            /// </summary>
            [EnumMember(Value = "DESC")]
            DESC = 2

        }


        /// <summary>
        /// Optional createdAt sort direction ASC or DESC
        /// </summary>
        /// <value>Optional createdAt sort direction ASC or DESC</value>
        [DataMember(Name = "sortDirection", EmitDefaultValue = true)]
        public SortDirectionEnum? SortDirection { get; set; }
        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPINBOX for value: SMTP_INBOX
            /// </summary>
            [EnumMember(Value = "SMTP_INBOX")]
            SMTPINBOX = 2

        }


        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [DataMember(Name = "inboxType", EmitDefaultValue = true)]
        public InboxTypeEnum? InboxType { get; set; }
        /// <summary>
        /// Optional filter by inbox function
        /// </summary>
        /// <value>Optional filter by inbox function</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxFunctionEnum
        {
            /// <summary>
            /// Enum ALIAS for value: ALIAS
            /// </summary>
            [EnumMember(Value = "ALIAS")]
            ALIAS = 1,

            /// <summary>
            /// Enum THREAD for value: THREAD
            /// </summary>
            [EnumMember(Value = "THREAD")]
            THREAD = 2,

            /// <summary>
            /// Enum CATCHALL for value: CATCH_ALL
            /// </summary>
            [EnumMember(Value = "CATCH_ALL")]
            CATCHALL = 3,

            /// <summary>
            /// Enum CONNECTOR for value: CONNECTOR
            /// </summary>
            [EnumMember(Value = "CONNECTOR")]
            CONNECTOR = 4

        }


        /// <summary>
        /// Optional filter by inbox function
        /// </summary>
        /// <value>Optional filter by inbox function</value>
        [DataMember(Name = "inboxFunction", EmitDefaultValue = true)]
        public InboxFunctionEnum? InboxFunction { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="SearchInboxesOptions" /> class.
        /// </summary>
        /// <param name="pageIndex">Optional page index in list pagination.</param>
        /// <param name="pageSize">Optional page size in list pagination.</param>
        /// <param name="sortDirection">Optional createdAt sort direction ASC or DESC.</param>
        /// <param name="favourite">Optionally filter results for favourites only.</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address.</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags.</param>
        /// <param name="since">Optional filter by created after given date time.</param>
        /// <param name="before">Optional filter by created before given date time.</param>
        /// <param name="inboxType">Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send)..</param>
        /// <param name="inboxFunction">Optional filter by inbox function.</param>
        /// <param name="domainId">Optional domain ID filter.</param>
        public SearchInboxesOptions(int? pageIndex = default(int?), int? pageSize = default(int?), SortDirectionEnum? sortDirection = default(SortDirectionEnum?), bool? favourite = default(bool?), string search = default(string), string tag = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), InboxTypeEnum? inboxType = default(InboxTypeEnum?), InboxFunctionEnum? inboxFunction = default(InboxFunctionEnum?), Guid? domainId = default(Guid?))
        {
            this.PageIndex = pageIndex;
            this.PageSize = pageSize;
            this.SortDirection = sortDirection;
            this.Favourite = favourite;
            this.Search = search;
            this.Tag = tag;
            this.Since = since;
            this.Before = before;
            this.InboxType = inboxType;
            this.InboxFunction = inboxFunction;
            this.DomainId = domainId;
        }

        /// <summary>
        /// Optional page index in list pagination
        /// </summary>
        /// <value>Optional page index in list pagination</value>
        [DataMember(Name = "pageIndex", EmitDefaultValue = true)]
        public int? PageIndex { get; set; }

        /// <summary>
        /// Optional page size in list pagination
        /// </summary>
        /// <value>Optional page size in list pagination</value>
        [DataMember(Name = "pageSize", EmitDefaultValue = true)]
        public int? PageSize { get; set; }

        /// <summary>
        /// Optionally filter results for favourites only
        /// </summary>
        /// <value>Optionally filter results for favourites only</value>
        [DataMember(Name = "favourite", EmitDefaultValue = true)]
        public bool? Favourite { get; set; }

        /// <summary>
        /// Optionally filter by search words partial matching ID, tags, name, and email address
        /// </summary>
        /// <value>Optionally filter by search words partial matching ID, tags, name, and email address</value>
        [DataMember(Name = "search", EmitDefaultValue = true)]
        public string Search { get; set; }

        /// <summary>
        /// Optionally filter by tags. Will return inboxes that include given tags
        /// </summary>
        /// <value>Optionally filter by tags. Will return inboxes that include given tags</value>
        [DataMember(Name = "tag", EmitDefaultValue = true)]
        public string Tag { get; set; }

        /// <summary>
        /// Optional filter by created after given date time
        /// </summary>
        /// <value>Optional filter by created after given date time</value>
        [DataMember(Name = "since", EmitDefaultValue = true)]
        public DateTime? Since { get; set; }

        /// <summary>
        /// Optional filter by created before given date time
        /// </summary>
        /// <value>Optional filter by created before given date time</value>
        [DataMember(Name = "before", EmitDefaultValue = true)]
        public DateTime? Before { get; set; }

        /// <summary>
        /// Optional domain ID filter
        /// </summary>
        /// <value>Optional domain ID filter</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SearchInboxesOptions {\n");
            sb.Append("  PageIndex: ").Append(PageIndex).Append("\n");
            sb.Append("  PageSize: ").Append(PageSize).Append("\n");
            sb.Append("  SortDirection: ").Append(SortDirection).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("  Search: ").Append(Search).Append("\n");
            sb.Append("  Tag: ").Append(Tag).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("  InboxType: ").Append(InboxType).Append("\n");
            sb.Append("  InboxFunction: ").Append(InboxFunction).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SearchInboxesOptions);
        }

        /// <summary>
        /// Returns true if SearchInboxesOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SearchInboxesOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SearchInboxesOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.PageIndex == input.PageIndex ||
                    (this.PageIndex != null &&
                    this.PageIndex.Equals(input.PageIndex))
                ) && 
                (
                    this.PageSize == input.PageSize ||
                    (this.PageSize != null &&
                    this.PageSize.Equals(input.PageSize))
                ) && 
                (
                    this.SortDirection == input.SortDirection ||
                    this.SortDirection.Equals(input.SortDirection)
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    (this.Favourite != null &&
                    this.Favourite.Equals(input.Favourite))
                ) && 
                (
                    this.Search == input.Search ||
                    (this.Search != null &&
                    this.Search.Equals(input.Search))
                ) && 
                (
                    this.Tag == input.Tag ||
                    (this.Tag != null &&
                    this.Tag.Equals(input.Tag))
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                ) && 
                (
                    this.InboxType == input.InboxType ||
                    this.InboxType.Equals(input.InboxType)
                ) && 
                (
                    this.InboxFunction == input.InboxFunction ||
                    this.InboxFunction.Equals(input.InboxFunction)
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.PageIndex != null)
                {
                    hashCode = (hashCode * 59) + this.PageIndex.GetHashCode();
                }
                if (this.PageSize != null)
                {
                    hashCode = (hashCode * 59) + this.PageSize.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SortDirection.GetHashCode();
                if (this.Favourite != null)
                {
                    hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                }
                if (this.Search != null)
                {
                    hashCode = (hashCode * 59) + this.Search.GetHashCode();
                }
                if (this.Tag != null)
                {
                    hashCode = (hashCode * 59) + this.Tag.GetHashCode();
                }
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.InboxType.GetHashCode();
                hashCode = (hashCode * 59) + this.InboxFunction.GetHashCode();
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/SearchEmailsOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// SearchEmailsOptions
    /// </summary>
    [DataContract(Name = "SearchEmailsOptions")]
    public partial class SearchEmailsOptions : IEquatable<SearchEmailsOptions>, IValidatableObject
    {
        /// <summary>
        /// Optional createdAt sort direction ASC or DESC
        /// </summary>
        /// <value>Optional createdAt sort direction ASC or DESC</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SortDirectionEnum
        {
            /// <summary>
            /// Enum ASC for value: ASC
            /// </summary>
            [EnumMember(Value = "ASC")]
            ASC = 1,

            /// <summary>
            /// Enum DESC for value: DESC
            /// </summary>
            [EnumMember(Value = "DESC")]
            DESC = 2

        }


        /// <summary>
        /// Optional createdAt sort direction ASC or DESC
        /// </summary>
        /// <value>Optional createdAt sort direction ASC or DESC</value>
        [DataMember(Name = "sortDirection", EmitDefaultValue = false)]
        public SortDirectionEnum? SortDirection { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="SearchEmailsOptions" /> class.
        /// </summary>
        /// <param name="inboxIds">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account..</param>
        /// <param name="pageIndex">Optional page index in email list pagination.</param>
        /// <param name="pageSize">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results.</param>
        /// <param name="sortDirection">Optional createdAt sort direction ASC or DESC.</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly.</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body.</param>
        /// <param name="since">Optional filter emails received after given date time.</param>
        /// <param name="before">Optional filter emails received before given date time.</param>
        public SearchEmailsOptions(List<Guid> inboxIds = default(List<Guid>), int pageIndex = default(int), int pageSize = default(int), SortDirectionEnum? sortDirection = default(SortDirectionEnum?), bool unreadOnly = default(bool), string searchFilter = default(string), DateTime since = default(DateTime), DateTime before = default(DateTime))
        {
            this.InboxIds = inboxIds;
            this.PageIndex = pageIndex;
            this.PageSize = pageSize;
            this.SortDirection = sortDirection;
            this.UnreadOnly = unreadOnly;
            this.SearchFilter = searchFilter;
            this.Since = since;
            this.Before = before;
        }

        /// <summary>
        /// Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account.
        /// </summary>
        /// <value>Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account.</value>
        [DataMember(Name = "inboxIds", EmitDefaultValue = false)]
        public List<Guid> InboxIds { get; set; }

        /// <summary>
        /// Optional page index in email list pagination
        /// </summary>
        /// <value>Optional page index in email list pagination</value>
        [DataMember(Name = "pageIndex", EmitDefaultValue = false)]
        public int PageIndex { get; set; }

        /// <summary>
        /// Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results
        /// </summary>
        /// <value>Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results</value>
        [DataMember(Name = "pageSize", EmitDefaultValue = false)]
        public int PageSize { get; set; }

        /// <summary>
        /// Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly
        /// </summary>
        /// <value>Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly</value>
        [DataMember(Name = "unreadOnly", EmitDefaultValue = true)]
        public bool UnreadOnly { get; set; }

        /// <summary>
        /// Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body
        /// </summary>
        /// <value>Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body</value>
        [DataMember(Name = "searchFilter", EmitDefaultValue = false)]
        public string SearchFilter { get; set; }

        /// <summary>
        /// Optional filter emails received after given date time
        /// </summary>
        /// <value>Optional filter emails received after given date time</value>
        [DataMember(Name = "since", EmitDefaultValue = false)]
        public DateTime Since { get; set; }

        /// <summary>
        /// Optional filter emails received before given date time
        /// </summary>
        /// <value>Optional filter emails received before given date time</value>
        [DataMember(Name = "before", EmitDefaultValue = false)]
        public DateTime Before { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class SearchEmailsOptions {\n");
            sb.Append("  InboxIds: ").Append(InboxIds).Append("\n");
            sb.Append("  PageIndex: ").Append(PageIndex).Append("\n");
            sb.Append("  PageSize: ").Append(PageSize).Append("\n");
            sb.Append("  SortDirection: ").Append(SortDirection).Append("\n");
            sb.Append("  UnreadOnly: ").Append(UnreadOnly).Append("\n");
            sb.Append("  SearchFilter: ").Append(SearchFilter).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as SearchEmailsOptions);
        }

        /// <summary>
        /// Returns true if SearchEmailsOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of SearchEmailsOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SearchEmailsOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxIds == input.InboxIds ||
                    this.InboxIds != null &&
                    input.InboxIds != null &&
                    this.InboxIds.SequenceEqual(input.InboxIds)
                ) && 
                (
                    this.PageIndex == input.PageIndex ||
                    this.PageIndex.Equals(input.PageIndex)
                ) && 
                (
                    this.PageSize == input.PageSize ||
                    this.PageSize.Equals(input.PageSize)
                ) && 
                (
                    this.SortDirection == input.SortDirection ||
                    this.SortDirection.Equals(input.SortDirection)
                ) && 
                (
                    this.UnreadOnly == input.UnreadOnly ||
                    this.UnreadOnly.Equals(input.UnreadOnly)
                ) && 
                (
                    this.SearchFilter == input.SearchFilter ||
                    (this.SearchFilter != null &&
                    this.SearchFilter.Equals(input.SearchFilter))
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxIds != null)
                {
                    hashCode = (hashCode * 59) + this.InboxIds.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PageIndex.GetHashCode();
                hashCode = (hashCode * 59) + this.PageSize.GetHashCode();
                hashCode = (hashCode * 59) + this.SortDirection.GetHashCode();
                hashCode = (hashCode * 59) + this.UnreadOnly.GetHashCode();
                if (this.SearchFilter != null)
                {
                    hashCode = (hashCode * 59) + this.SearchFilter.GetHashCode();
                }
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            // PageSize (int) maximum
            if (this.PageSize > (int)100)
            {
                yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for PageSize, must be a value less than or equal to 100.", new [] { "PageSize" });
            }

            yield break;
        }
    }

}

src/mailslurp/Model/ScheduledJobDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ScheduledJobDto
    /// </summary>
    [DataContract(Name = "ScheduledJobDto")]
    public partial class ScheduledJobDto : IEquatable<ScheduledJobDto>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUBMITTED for value: SUBMITTED
            /// </summary>
            [EnumMember(Value = "SUBMITTED")]
            SUBMITTED = 1,

            /// <summary>
            /// Enum COMPLETED for value: COMPLETED
            /// </summary>
            [EnumMember(Value = "COMPLETED")]
            COMPLETED = 2,

            /// <summary>
            /// Enum ABORTED for value: ABORTED
            /// </summary>
            [EnumMember(Value = "ABORTED")]
            ABORTED = 3,

            /// <summary>
            /// Enum FAILED for value: FAILED
            /// </summary>
            [EnumMember(Value = "FAILED")]
            FAILED = 4,

            /// <summary>
            /// Enum CANCELLED for value: CANCELLED
            /// </summary>
            [EnumMember(Value = "CANCELLED")]
            CANCELLED = 5

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", IsRequired = true, EmitDefaultValue = true)]
        public StatusEnum Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ScheduledJobDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ScheduledJobDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ScheduledJobDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="jobId">jobId (required).</param>
        /// <param name="groupId">groupId (required).</param>
        /// <param name="triggerId">triggerId (required).</param>
        /// <param name="status">status (required).</param>
        /// <param name="sendAtTimestamp">sendAtTimestamp (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public ScheduledJobDto(Guid id = default(Guid), Guid userId = default(Guid), Guid inboxId = default(Guid), string jobId = default(string), string groupId = default(string), string triggerId = default(string), StatusEnum status = default(StatusEnum), DateTime sendAtTimestamp = default(DateTime), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.InboxId = inboxId;
            // to ensure "jobId" is required (not null)
            if (jobId == null)
            {
                throw new ArgumentNullException("jobId is a required property for ScheduledJobDto and cannot be null");
            }
            this.JobId = jobId;
            // to ensure "groupId" is required (not null)
            if (groupId == null)
            {
                throw new ArgumentNullException("groupId is a required property for ScheduledJobDto and cannot be null");
            }
            this.GroupId = groupId;
            // to ensure "triggerId" is required (not null)
            if (triggerId == null)
            {
                throw new ArgumentNullException("triggerId is a required property for ScheduledJobDto and cannot be null");
            }
            this.TriggerId = triggerId;
            this.Status = status;
            this.SendAtTimestamp = sendAtTimestamp;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets JobId
        /// </summary>
        [DataMember(Name = "jobId", IsRequired = true, EmitDefaultValue = true)]
        public string JobId { get; set; }

        /// <summary>
        /// Gets or Sets GroupId
        /// </summary>
        [DataMember(Name = "groupId", IsRequired = true, EmitDefaultValue = true)]
        public string GroupId { get; set; }

        /// <summary>
        /// Gets or Sets TriggerId
        /// </summary>
        [DataMember(Name = "triggerId", IsRequired = true, EmitDefaultValue = true)]
        public string TriggerId { get; set; }

        /// <summary>
        /// Gets or Sets SendAtTimestamp
        /// </summary>
        [DataMember(Name = "sendAtTimestamp", IsRequired = true, EmitDefaultValue = true)]
        public DateTime SendAtTimestamp { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ScheduledJobDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  JobId: ").Append(JobId).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("  TriggerId: ").Append(TriggerId).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  SendAtTimestamp: ").Append(SendAtTimestamp).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ScheduledJobDto);
        }

        /// <summary>
        /// Returns true if ScheduledJobDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ScheduledJobDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ScheduledJobDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.JobId == input.JobId ||
                    (this.JobId != null &&
                    this.JobId.Equals(input.JobId))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                ) && 
                (
                    this.TriggerId == input.TriggerId ||
                    (this.TriggerId != null &&
                    this.TriggerId.Equals(input.TriggerId))
                ) && 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                ) && 
                (
                    this.SendAtTimestamp == input.SendAtTimestamp ||
                    (this.SendAtTimestamp != null &&
                    this.SendAtTimestamp.Equals(input.SendAtTimestamp))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.JobId != null)
                {
                    hashCode = (hashCode * 59) + this.JobId.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                if (this.TriggerId != null)
                {
                    hashCode = (hashCode * 59) + this.TriggerId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                if (this.SendAtTimestamp != null)
                {
                    hashCode = (hashCode * 59) + this.SendAtTimestamp.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ScheduledJob.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ScheduledJob
    /// </summary>
    [DataContract(Name = "ScheduledJob")]
    public partial class ScheduledJob : IEquatable<ScheduledJob>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUBMITTED for value: SUBMITTED
            /// </summary>
            [EnumMember(Value = "SUBMITTED")]
            SUBMITTED = 1,

            /// <summary>
            /// Enum COMPLETED for value: COMPLETED
            /// </summary>
            [EnumMember(Value = "COMPLETED")]
            COMPLETED = 2,

            /// <summary>
            /// Enum ABORTED for value: ABORTED
            /// </summary>
            [EnumMember(Value = "ABORTED")]
            ABORTED = 3,

            /// <summary>
            /// Enum FAILED for value: FAILED
            /// </summary>
            [EnumMember(Value = "FAILED")]
            FAILED = 4,

            /// <summary>
            /// Enum CANCELLED for value: CANCELLED
            /// </summary>
            [EnumMember(Value = "CANCELLED")]
            CANCELLED = 5

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", IsRequired = true, EmitDefaultValue = true)]
        public StatusEnum Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ScheduledJob" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ScheduledJob() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ScheduledJob" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="jobId">jobId (required).</param>
        /// <param name="groupId">groupId (required).</param>
        /// <param name="triggerId">triggerId (required).</param>
        /// <param name="status">status (required).</param>
        /// <param name="sendAtTimestamp">sendAtTimestamp (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public ScheduledJob(Guid id = default(Guid), Guid userId = default(Guid), Guid inboxId = default(Guid), string jobId = default(string), string groupId = default(string), string triggerId = default(string), StatusEnum status = default(StatusEnum), DateTime sendAtTimestamp = default(DateTime), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.InboxId = inboxId;
            // to ensure "jobId" is required (not null)
            if (jobId == null)
            {
                throw new ArgumentNullException("jobId is a required property for ScheduledJob and cannot be null");
            }
            this.JobId = jobId;
            // to ensure "groupId" is required (not null)
            if (groupId == null)
            {
                throw new ArgumentNullException("groupId is a required property for ScheduledJob and cannot be null");
            }
            this.GroupId = groupId;
            // to ensure "triggerId" is required (not null)
            if (triggerId == null)
            {
                throw new ArgumentNullException("triggerId is a required property for ScheduledJob and cannot be null");
            }
            this.TriggerId = triggerId;
            this.Status = status;
            this.SendAtTimestamp = sendAtTimestamp;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets JobId
        /// </summary>
        [DataMember(Name = "jobId", IsRequired = true, EmitDefaultValue = true)]
        public string JobId { get; set; }

        /// <summary>
        /// Gets or Sets GroupId
        /// </summary>
        [DataMember(Name = "groupId", IsRequired = true, EmitDefaultValue = true)]
        public string GroupId { get; set; }

        /// <summary>
        /// Gets or Sets TriggerId
        /// </summary>
        [DataMember(Name = "triggerId", IsRequired = true, EmitDefaultValue = true)]
        public string TriggerId { get; set; }

        /// <summary>
        /// Gets or Sets SendAtTimestamp
        /// </summary>
        [DataMember(Name = "sendAtTimestamp", IsRequired = true, EmitDefaultValue = true)]
        public DateTime SendAtTimestamp { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ScheduledJob {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  JobId: ").Append(JobId).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("  TriggerId: ").Append(TriggerId).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  SendAtTimestamp: ").Append(SendAtTimestamp).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ScheduledJob);
        }

        /// <summary>
        /// Returns true if ScheduledJob instances are equal
        /// </summary>
        /// <param name="input">Instance of ScheduledJob to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ScheduledJob input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.JobId == input.JobId ||
                    (this.JobId != null &&
                    this.JobId.Equals(input.JobId))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                ) && 
                (
                    this.TriggerId == input.TriggerId ||
                    (this.TriggerId != null &&
                    this.TriggerId.Equals(input.TriggerId))
                ) && 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                ) && 
                (
                    this.SendAtTimestamp == input.SendAtTimestamp ||
                    (this.SendAtTimestamp != null &&
                    this.SendAtTimestamp.Equals(input.SendAtTimestamp))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.JobId != null)
                {
                    hashCode = (hashCode * 59) + this.JobId.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                if (this.TriggerId != null)
                {
                    hashCode = (hashCode * 59) + this.TriggerId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                if (this.SendAtTimestamp != null)
                {
                    hashCode = (hashCode * 59) + this.SendAtTimestamp.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ReplyToEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for replying to email with API
    /// </summary>
    [DataContract(Name = "ReplyToEmailOptions")]
    public partial class ReplyToEmailOptions : IEquatable<ReplyToEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SendStrategyEnum
        {
            /// <summary>
            /// Enum SINGLEMESSAGE for value: SINGLE_MESSAGE
            /// </summary>
            [EnumMember(Value = "SINGLE_MESSAGE")]
            SINGLEMESSAGE = 1

        }


        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [DataMember(Name = "sendStrategy", EmitDefaultValue = true)]
        public SendStrategyEnum? SendStrategy { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReplyToEmailOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ReplyToEmailOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReplyToEmailOptions" /> class.
        /// </summary>
        /// <param name="body">Body of the reply email you want to send (required).</param>
        /// <param name="isHTML">Is the reply HTML (required).</param>
        /// <param name="from">The from header that should be used. Optional.</param>
        /// <param name="replyTo">The replyTo header that should be used. Optional.</param>
        /// <param name="customHeaders">Optional custom headers.</param>
        /// <param name="charset">The charset that your message should be sent with. Optional. Default is UTF-8.</param>
        /// <param name="attachments">List of uploaded attachments to send with the reply. Optional..</param>
        /// <param name="templateVariables">Template variables if using a template.</param>
        /// <param name="template">Template ID to use instead of body. Will use template variable map to fill defined variable slots..</param>
        /// <param name="sendStrategy">How an email should be sent based on its recipients.</param>
        /// <param name="useInboxName">Optionally use inbox name as display name for sender email address.</param>
        /// <param name="html">html.</param>
        public ReplyToEmailOptions(string body = default(string), bool isHTML = default(bool), string from = default(string), string replyTo = default(string), Dictionary<string, string> customHeaders = default(Dictionary<string, string>), string charset = default(string), List<string> attachments = default(List<string>), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>), Guid? template = default(Guid?), SendStrategyEnum? sendStrategy = default(SendStrategyEnum?), bool? useInboxName = default(bool?), bool html = default(bool))
        {
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for ReplyToEmailOptions and cannot be null");
            }
            this.Body = body;
            this.IsHTML = isHTML;
            this.From = from;
            this.ReplyTo = replyTo;
            this.CustomHeaders = customHeaders;
            this.Charset = charset;
            this.Attachments = attachments;
            this.TemplateVariables = templateVariables;
            this.Template = template;
            this.SendStrategy = sendStrategy;
            this.UseInboxName = useInboxName;
            this.Html = html;
        }

        /// <summary>
        /// Body of the reply email you want to send
        /// </summary>
        /// <value>Body of the reply email you want to send</value>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Is the reply HTML
        /// </summary>
        /// <value>Is the reply HTML</value>
        [DataMember(Name = "isHTML", IsRequired = true, EmitDefaultValue = true)]
        public bool IsHTML { get; set; }

        /// <summary>
        /// The from header that should be used. Optional
        /// </summary>
        /// <value>The from header that should be used. Optional</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// The replyTo header that should be used. Optional
        /// </summary>
        /// <value>The replyTo header that should be used. Optional</value>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Optional custom headers
        /// </summary>
        /// <value>Optional custom headers</value>
        [DataMember(Name = "customHeaders", EmitDefaultValue = true)]
        public Dictionary<string, string> CustomHeaders { get; set; }

        /// <summary>
        /// The charset that your message should be sent with. Optional. Default is UTF-8
        /// </summary>
        /// <value>The charset that your message should be sent with. Optional. Default is UTF-8</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// List of uploaded attachments to send with the reply. Optional.
        /// </summary>
        /// <value>List of uploaded attachments to send with the reply. Optional.</value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Template variables if using a template
        /// </summary>
        /// <value>Template variables if using a template</value>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Template ID to use instead of body. Will use template variable map to fill defined variable slots.
        /// </summary>
        /// <value>Template ID to use instead of body. Will use template variable map to fill defined variable slots.</value>
        [DataMember(Name = "template", EmitDefaultValue = true)]
        public Guid? Template { get; set; }

        /// <summary>
        /// Optionally use inbox name as display name for sender email address
        /// </summary>
        /// <value>Optionally use inbox name as display name for sender email address</value>
        [DataMember(Name = "useInboxName", EmitDefaultValue = true)]
        public bool? UseInboxName { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", EmitDefaultValue = true)]
        public bool Html { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ReplyToEmailOptions {\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  CustomHeaders: ").Append(CustomHeaders).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("  Template: ").Append(Template).Append("\n");
            sb.Append("  SendStrategy: ").Append(SendStrategy).Append("\n");
            sb.Append("  UseInboxName: ").Append(UseInboxName).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ReplyToEmailOptions);
        }

        /// <summary>
        /// Returns true if ReplyToEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ReplyToEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ReplyToEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    this.IsHTML.Equals(input.IsHTML)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.CustomHeaders == input.CustomHeaders ||
                    this.CustomHeaders != null &&
                    input.CustomHeaders != null &&
                    this.CustomHeaders.SequenceEqual(input.CustomHeaders)
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                ) && 
                (
                    this.Template == input.Template ||
                    (this.Template != null &&
                    this.Template.Equals(input.Template))
                ) && 
                (
                    this.SendStrategy == input.SendStrategy ||
                    this.SendStrategy.Equals(input.SendStrategy)
                ) && 
                (
                    this.UseInboxName == input.UseInboxName ||
                    (this.UseInboxName != null &&
                    this.UseInboxName.Equals(input.UseInboxName))
                ) && 
                (
                    this.Html == input.Html ||
                    this.Html.Equals(input.Html)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.CustomHeaders != null)
                {
                    hashCode = (hashCode * 59) + this.CustomHeaders.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                if (this.Template != null)
                {
                    hashCode = (hashCode * 59) + this.Template.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SendStrategy.GetHashCode();
                if (this.UseInboxName != null)
                {
                    hashCode = (hashCode * 59) + this.UseInboxName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Html.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ReplyToAliasEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for replying to an alias email using the alias inbox
    /// </summary>
    [DataContract(Name = "ReplyToAliasEmailOptions")]
    public partial class ReplyToAliasEmailOptions : IEquatable<ReplyToAliasEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SendStrategyEnum
        {
            /// <summary>
            /// Enum SINGLEMESSAGE for value: SINGLE_MESSAGE
            /// </summary>
            [EnumMember(Value = "SINGLE_MESSAGE")]
            SINGLEMESSAGE = 1

        }


        /// <summary>
        /// How an email should be sent based on its recipients
        /// </summary>
        /// <value>How an email should be sent based on its recipients</value>
        [DataMember(Name = "sendStrategy", EmitDefaultValue = true)]
        public SendStrategyEnum? SendStrategy { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReplyToAliasEmailOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ReplyToAliasEmailOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReplyToAliasEmailOptions" /> class.
        /// </summary>
        /// <param name="body">Body of the reply email you want to send (required).</param>
        /// <param name="isHTML">Is the reply HTML (required).</param>
        /// <param name="charset">The charset that your message should be sent with. Optional. Default is UTF-8.</param>
        /// <param name="attachments">List of uploaded attachments to send with the reply. Optional..</param>
        /// <param name="templateVariables">Template variables if using a template.</param>
        /// <param name="template">Template ID to use instead of body. Will use template variable map to fill defined variable slots..</param>
        /// <param name="sendStrategy">How an email should be sent based on its recipients.</param>
        /// <param name="customHeaders">Optional custom headers.</param>
        /// <param name="useInboxName">Optionally use inbox name as display name for sender email address.</param>
        /// <param name="html">html.</param>
        public ReplyToAliasEmailOptions(string body = default(string), bool isHTML = default(bool), string charset = default(string), List<string> attachments = default(List<string>), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>), Guid? template = default(Guid?), SendStrategyEnum? sendStrategy = default(SendStrategyEnum?), Dictionary<string, string> customHeaders = default(Dictionary<string, string>), bool? useInboxName = default(bool?), bool html = default(bool))
        {
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for ReplyToAliasEmailOptions and cannot be null");
            }
            this.Body = body;
            this.IsHTML = isHTML;
            this.Charset = charset;
            this.Attachments = attachments;
            this.TemplateVariables = templateVariables;
            this.Template = template;
            this.SendStrategy = sendStrategy;
            this.CustomHeaders = customHeaders;
            this.UseInboxName = useInboxName;
            this.Html = html;
        }

        /// <summary>
        /// Body of the reply email you want to send
        /// </summary>
        /// <value>Body of the reply email you want to send</value>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Is the reply HTML
        /// </summary>
        /// <value>Is the reply HTML</value>
        [DataMember(Name = "isHTML", IsRequired = true, EmitDefaultValue = true)]
        public bool IsHTML { get; set; }

        /// <summary>
        /// The charset that your message should be sent with. Optional. Default is UTF-8
        /// </summary>
        /// <value>The charset that your message should be sent with. Optional. Default is UTF-8</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// List of uploaded attachments to send with the reply. Optional.
        /// </summary>
        /// <value>List of uploaded attachments to send with the reply. Optional.</value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Template variables if using a template
        /// </summary>
        /// <value>Template variables if using a template</value>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Template ID to use instead of body. Will use template variable map to fill defined variable slots.
        /// </summary>
        /// <value>Template ID to use instead of body. Will use template variable map to fill defined variable slots.</value>
        [DataMember(Name = "template", EmitDefaultValue = true)]
        public Guid? Template { get; set; }

        /// <summary>
        /// Optional custom headers
        /// </summary>
        /// <value>Optional custom headers</value>
        [DataMember(Name = "customHeaders", EmitDefaultValue = true)]
        public Dictionary<string, string> CustomHeaders { get; set; }

        /// <summary>
        /// Optionally use inbox name as display name for sender email address
        /// </summary>
        /// <value>Optionally use inbox name as display name for sender email address</value>
        [DataMember(Name = "useInboxName", EmitDefaultValue = true)]
        public bool? UseInboxName { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", EmitDefaultValue = true)]
        public bool Html { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ReplyToAliasEmailOptions {\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("  Template: ").Append(Template).Append("\n");
            sb.Append("  SendStrategy: ").Append(SendStrategy).Append("\n");
            sb.Append("  CustomHeaders: ").Append(CustomHeaders).Append("\n");
            sb.Append("  UseInboxName: ").Append(UseInboxName).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ReplyToAliasEmailOptions);
        }

        /// <summary>
        /// Returns true if ReplyToAliasEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ReplyToAliasEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ReplyToAliasEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    this.IsHTML.Equals(input.IsHTML)
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                ) && 
                (
                    this.Template == input.Template ||
                    (this.Template != null &&
                    this.Template.Equals(input.Template))
                ) && 
                (
                    this.SendStrategy == input.SendStrategy ||
                    this.SendStrategy.Equals(input.SendStrategy)
                ) && 
                (
                    this.CustomHeaders == input.CustomHeaders ||
                    this.CustomHeaders != null &&
                    input.CustomHeaders != null &&
                    this.CustomHeaders.SequenceEqual(input.CustomHeaders)
                ) && 
                (
                    this.UseInboxName == input.UseInboxName ||
                    (this.UseInboxName != null &&
                    this.UseInboxName.Equals(input.UseInboxName))
                ) && 
                (
                    this.Html == input.Html ||
                    this.Html.Equals(input.Html)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                if (this.Template != null)
                {
                    hashCode = (hashCode * 59) + this.Template.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SendStrategy.GetHashCode();
                if (this.CustomHeaders != null)
                {
                    hashCode = (hashCode * 59) + this.CustomHeaders.GetHashCode();
                }
                if (this.UseInboxName != null)
                {
                    hashCode = (hashCode * 59) + this.UseInboxName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Html.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ReplyForSms.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ReplyForSms
    /// </summary>
    [DataContract(Name = "ReplyForSms")]
    public partial class ReplyForSms : IEquatable<ReplyForSms>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ReplyForSms" /> class.
        /// </summary>
        /// <param name="reply">reply.</param>
        public ReplyForSms(SentSmsDto reply = default(SentSmsDto))
        {
            this.Reply = reply;
        }

        /// <summary>
        /// Gets or Sets Reply
        /// </summary>
        [DataMember(Name = "reply", EmitDefaultValue = false)]
        public SentSmsDto Reply { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ReplyForSms {\n");
            sb.Append("  Reply: ").Append(Reply).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ReplyForSms);
        }

        /// <summary>
        /// Returns true if ReplyForSms instances are equal
        /// </summary>
        /// <param name="input">Instance of ReplyForSms to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ReplyForSms input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Reply == input.Reply ||
                    (this.Reply != null &&
                    this.Reply.Equals(input.Reply))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Reply != null)
                {
                    hashCode = (hashCode * 59) + this.Reply.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/Recipient.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email recipient
    /// </summary>
    [DataContract(Name = "Recipient")]
    public partial class Recipient : IEquatable<Recipient>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Recipient" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected Recipient() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="Recipient" /> class.
        /// </summary>
        /// <param name="rawValue">rawValue (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="name">name.</param>
        public Recipient(string rawValue = default(string), string emailAddress = default(string), string name = default(string))
        {
            // to ensure "rawValue" is required (not null)
            if (rawValue == null)
            {
                throw new ArgumentNullException("rawValue is a required property for Recipient and cannot be null");
            }
            this.RawValue = rawValue;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for Recipient and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets RawValue
        /// </summary>
        [DataMember(Name = "rawValue", IsRequired = true, EmitDefaultValue = true)]
        public string RawValue { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class Recipient {\n");
            sb.Append("  RawValue: ").Append(RawValue).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as Recipient);
        }

        /// <summary>
        /// Returns true if Recipient instances are equal
        /// </summary>
        /// <param name="input">Instance of Recipient to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Recipient input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RawValue == input.RawValue ||
                    (this.RawValue != null &&
                    this.RawValue.Equals(input.RawValue))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RawValue != null)
                {
                    hashCode = (hashCode * 59) + this.RawValue.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/RawEmailJson.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Content in raw format
    /// </summary>
    [DataContract(Name = "RawEmailJson")]
    public partial class RawEmailJson : IEquatable<RawEmailJson>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="RawEmailJson" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected RawEmailJson() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="RawEmailJson" /> class.
        /// </summary>
        /// <param name="content">content (required).</param>
        public RawEmailJson(string content = default(string))
        {
            // to ensure "content" is required (not null)
            if (content == null)
            {
                throw new ArgumentNullException("content is a required property for RawEmailJson and cannot be null");
            }
            this.Content = content;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", IsRequired = true, EmitDefaultValue = true)]
        public string Content { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class RawEmailJson {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as RawEmailJson);
        }

        /// <summary>
        /// Returns true if RawEmailJson instances are equal
        /// </summary>
        /// <param name="input">Instance of RawEmailJson to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(RawEmailJson input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    (this.Content != null &&
                    this.Content.Equals(input.Content))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PhonePlanDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// PhonePlanDto
    /// </summary>
    [DataContract(Name = "PhonePlanDto")]
    public partial class PhonePlanDto : IEquatable<PhonePlanDto>, IValidatableObject
    {
        /// <summary>
        /// Defines PhoneCountry
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PhoneCountryEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets PhoneCountry
        /// </summary>
        [DataMember(Name = "phoneCountry", IsRequired = true, EmitDefaultValue = true)]
        public PhoneCountryEnum PhoneCountry { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhonePlanDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PhonePlanDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhonePlanDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="phoneCountry">phoneCountry (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public PhonePlanDto(Guid id = default(Guid), Guid userId = default(Guid), PhoneCountryEnum phoneCountry = default(PhoneCountryEnum), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.PhoneCountry = phoneCountry;
            this.CreatedAt = createdAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PhonePlanDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneCountry: ").Append(PhoneCountry).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PhonePlanDto);
        }

        /// <summary>
        /// Returns true if PhonePlanDto instances are equal
        /// </summary>
        /// <param name="input">Instance of PhonePlanDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PhonePlanDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneCountry == input.PhoneCountry ||
                    this.PhoneCountry.Equals(input.PhoneCountry)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PhoneCountry.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PhoneNumberProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Phone number projection
    /// </summary>
    [DataContract(Name = "PhoneNumberProjection")]
    public partial class PhoneNumberProjection : IEquatable<PhoneNumberProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines PhoneCountry
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PhoneCountryEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets PhoneCountry
        /// </summary>
        [DataMember(Name = "phoneCountry", IsRequired = true, EmitDefaultValue = true)]
        public PhoneCountryEnum PhoneCountry { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneNumberProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PhoneNumberProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneNumberProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="phoneCountry">phoneCountry (required).</param>
        /// <param name="id">id (required).</param>
        public PhoneNumberProjection(DateTime createdAt = default(DateTime), Guid userId = default(Guid), string phoneNumber = default(string), PhoneCountryEnum phoneCountry = default(PhoneCountryEnum), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UserId = userId;
            // to ensure "phoneNumber" is required (not null)
            if (phoneNumber == null)
            {
                throw new ArgumentNullException("phoneNumber is a required property for PhoneNumberProjection and cannot be null");
            }
            this.PhoneNumber = phoneNumber;
            this.PhoneCountry = phoneCountry;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public string PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PhoneNumberProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  PhoneCountry: ").Append(PhoneCountry).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PhoneNumberProjection);
        }

        /// <summary>
        /// Returns true if PhoneNumberProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PhoneNumberProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PhoneNumberProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.PhoneCountry == input.PhoneCountry ||
                    this.PhoneCountry.Equals(input.PhoneCountry)
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PhoneCountry.GetHashCode();
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PhoneNumberDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// PhoneNumberDto
    /// </summary>
    [DataContract(Name = "PhoneNumberDto")]
    public partial class PhoneNumberDto : IEquatable<PhoneNumberDto>, IValidatableObject
    {
        /// <summary>
        /// Defines PhoneCountry
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PhoneCountryEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets PhoneCountry
        /// </summary>
        [DataMember(Name = "phoneCountry", IsRequired = true, EmitDefaultValue = true)]
        public PhoneCountryEnum PhoneCountry { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneNumberDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PhoneNumberDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneNumberDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="complianceAddress">complianceAddress.</param>
        /// <param name="emergencyAddress">emergencyAddress.</param>
        /// <param name="phoneNumber">phoneNumber (required).</param>
        /// <param name="phoneCountry">phoneCountry (required).</param>
        /// <param name="phonePlan">phonePlan (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public PhoneNumberDto(Guid id = default(Guid), Guid userId = default(Guid), Guid complianceAddress = default(Guid), Guid emergencyAddress = default(Guid), string phoneNumber = default(string), PhoneCountryEnum phoneCountry = default(PhoneCountryEnum), Guid phonePlan = default(Guid), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "phoneNumber" is required (not null)
            if (phoneNumber == null)
            {
                throw new ArgumentNullException("phoneNumber is a required property for PhoneNumberDto and cannot be null");
            }
            this.PhoneNumber = phoneNumber;
            this.PhoneCountry = phoneCountry;
            this.PhonePlan = phonePlan;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.ComplianceAddress = complianceAddress;
            this.EmergencyAddress = emergencyAddress;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets ComplianceAddress
        /// </summary>
        [DataMember(Name = "complianceAddress", EmitDefaultValue = false)]
        public Guid ComplianceAddress { get; set; }

        /// <summary>
        /// Gets or Sets EmergencyAddress
        /// </summary>
        [DataMember(Name = "emergencyAddress", EmitDefaultValue = false)]
        public Guid EmergencyAddress { get; set; }

        /// <summary>
        /// Gets or Sets PhoneNumber
        /// </summary>
        [DataMember(Name = "phoneNumber", IsRequired = true, EmitDefaultValue = true)]
        public string PhoneNumber { get; set; }

        /// <summary>
        /// Gets or Sets PhonePlan
        /// </summary>
        [DataMember(Name = "phonePlan", IsRequired = true, EmitDefaultValue = true)]
        public Guid PhonePlan { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PhoneNumberDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  ComplianceAddress: ").Append(ComplianceAddress).Append("\n");
            sb.Append("  EmergencyAddress: ").Append(EmergencyAddress).Append("\n");
            sb.Append("  PhoneNumber: ").Append(PhoneNumber).Append("\n");
            sb.Append("  PhoneCountry: ").Append(PhoneCountry).Append("\n");
            sb.Append("  PhonePlan: ").Append(PhonePlan).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PhoneNumberDto);
        }

        /// <summary>
        /// Returns true if PhoneNumberDto instances are equal
        /// </summary>
        /// <param name="input">Instance of PhoneNumberDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PhoneNumberDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.ComplianceAddress == input.ComplianceAddress ||
                    (this.ComplianceAddress != null &&
                    this.ComplianceAddress.Equals(input.ComplianceAddress))
                ) && 
                (
                    this.EmergencyAddress == input.EmergencyAddress ||
                    (this.EmergencyAddress != null &&
                    this.EmergencyAddress.Equals(input.EmergencyAddress))
                ) && 
                (
                    this.PhoneNumber == input.PhoneNumber ||
                    (this.PhoneNumber != null &&
                    this.PhoneNumber.Equals(input.PhoneNumber))
                ) && 
                (
                    this.PhoneCountry == input.PhoneCountry ||
                    this.PhoneCountry.Equals(input.PhoneCountry)
                ) && 
                (
                    this.PhonePlan == input.PhonePlan ||
                    (this.PhonePlan != null &&
                    this.PhonePlan.Equals(input.PhonePlan))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.ComplianceAddress != null)
                {
                    hashCode = (hashCode * 59) + this.ComplianceAddress.GetHashCode();
                }
                if (this.EmergencyAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmergencyAddress.GetHashCode();
                }
                if (this.PhoneNumber != null)
                {
                    hashCode = (hashCode * 59) + this.PhoneNumber.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PhoneCountry.GetHashCode();
                if (this.PhonePlan != null)
                {
                    hashCode = (hashCode * 59) + this.PhonePlan.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageableObject.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// PageableObject
    /// </summary>
    [DataContract(Name = "PageableObject")]
    public partial class PageableObject : IEquatable<PageableObject>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageableObject" /> class.
        /// </summary>
        /// <param name="pageNumber">pageNumber.</param>
        /// <param name="pageSize">pageSize.</param>
        /// <param name="unpaged">unpaged.</param>
        /// <param name="paged">paged.</param>
        /// <param name="offset">offset.</param>
        /// <param name="sort">sort.</param>
        public PageableObject(int pageNumber = default(int), int pageSize = default(int), bool unpaged = default(bool), bool paged = default(bool), long offset = default(long), SortObject sort = default(SortObject))
        {
            this.PageNumber = pageNumber;
            this.PageSize = pageSize;
            this.Unpaged = unpaged;
            this.Paged = paged;
            this.Offset = offset;
            this.Sort = sort;
        }

        /// <summary>
        /// Gets or Sets PageNumber
        /// </summary>
        [DataMember(Name = "pageNumber", EmitDefaultValue = false)]
        public int PageNumber { get; set; }

        /// <summary>
        /// Gets or Sets PageSize
        /// </summary>
        [DataMember(Name = "pageSize", EmitDefaultValue = false)]
        public int PageSize { get; set; }

        /// <summary>
        /// Gets or Sets Unpaged
        /// </summary>
        [DataMember(Name = "unpaged", EmitDefaultValue = true)]
        public bool Unpaged { get; set; }

        /// <summary>
        /// Gets or Sets Paged
        /// </summary>
        [DataMember(Name = "paged", EmitDefaultValue = true)]
        public bool Paged { get; set; }

        /// <summary>
        /// Gets or Sets Offset
        /// </summary>
        [DataMember(Name = "offset", EmitDefaultValue = false)]
        public long Offset { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageableObject {\n");
            sb.Append("  PageNumber: ").Append(PageNumber).Append("\n");
            sb.Append("  PageSize: ").Append(PageSize).Append("\n");
            sb.Append("  Unpaged: ").Append(Unpaged).Append("\n");
            sb.Append("  Paged: ").Append(Paged).Append("\n");
            sb.Append("  Offset: ").Append(Offset).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageableObject);
        }

        /// <summary>
        /// Returns true if PageableObject instances are equal
        /// </summary>
        /// <param name="input">Instance of PageableObject to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageableObject input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.PageNumber == input.PageNumber ||
                    this.PageNumber.Equals(input.PageNumber)
                ) && 
                (
                    this.PageSize == input.PageSize ||
                    this.PageSize.Equals(input.PageSize)
                ) && 
                (
                    this.Unpaged == input.Unpaged ||
                    this.Unpaged.Equals(input.Unpaged)
                ) && 
                (
                    this.Paged == input.Paged ||
                    this.Paged.Equals(input.Paged)
                ) && 
                (
                    this.Offset == input.Offset ||
                    this.Offset.Equals(input.Offset)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.PageNumber.GetHashCode();
                hashCode = (hashCode * 59) + this.PageSize.GetHashCode();
                hashCode = (hashCode * 59) + this.Unpaged.GetHashCode();
                hashCode = (hashCode * 59) + this.Paged.GetHashCode();
                hashCode = (hashCode * 59) + this.Offset.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageWebhookResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated webhook results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageWebhookResult")]
    public partial class PageWebhookResult : IEquatable<PageWebhookResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageWebhookResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageWebhookResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageWebhookResult" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageWebhookResult(List<WebhookResultDto> content = default(List<WebhookResultDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<WebhookResultDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageWebhookResult {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageWebhookResult);
        }

        /// <summary>
        /// Returns true if PageWebhookResult instances are equal
        /// </summary>
        /// <param name="input">Instance of PageWebhookResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageWebhookResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageWebhookProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated webhook entity. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageWebhookProjection")]
    public partial class PageWebhookProjection : IEquatable<PageWebhookProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageWebhookProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageWebhookProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageWebhookProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageWebhookProjection(List<WebhookProjection> content = default(List<WebhookProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<WebhookProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageWebhookProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageWebhookProjection);
        }

        /// <summary>
        /// Returns true if PageWebhookProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageWebhookProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageWebhookProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageUnknownMissedEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated unknown MissedEmail results. Unknown missed emails are emails that were sent to MailSlurp /Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageUnknownMissedEmailProjection")]
    public partial class PageUnknownMissedEmailProjection : IEquatable<PageUnknownMissedEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageUnknownMissedEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageUnknownMissedEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageUnknownMissedEmailProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageUnknownMissedEmailProjection(List<UnknownMissedEmailProjection> content = default(List<UnknownMissedEmailProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<UnknownMissedEmailProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageUnknownMissedEmailProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageUnknownMissedEmailProjection);
        }

        /// <summary>
        /// Returns true if PageUnknownMissedEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageUnknownMissedEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageUnknownMissedEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageTrackingPixelProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated TrackingPixel results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageTrackingPixelProjection")]
    public partial class PageTrackingPixelProjection : IEquatable<PageTrackingPixelProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageTrackingPixelProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageTrackingPixelProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageTrackingPixelProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageTrackingPixelProjection(List<TrackingPixelProjection> content = default(List<TrackingPixelProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<TrackingPixelProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageTrackingPixelProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageTrackingPixelProjection);
        }

        /// <summary>
        /// Returns true if PageTrackingPixelProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageTrackingPixelProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageTrackingPixelProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageThreadProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email projection results. EmailProjections and EmailPreviews are essentially the same but have legacy naming issues. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full email entity use the projection ID with individual method calls. For emails there are several methods for fetching message bodies and attachments.
    /// </summary>
    [DataContract(Name = "PageThreadProjection")]
    public partial class PageThreadProjection : IEquatable<PageThreadProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageThreadProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageThreadProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageThreadProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageThreadProjection(List<ThreadProjection> content = default(List<ThreadProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ThreadProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageThreadProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageThreadProjection);
        }

        /// <summary>
        /// Returns true if PageThreadProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageThreadProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageThreadProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageTemplateProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email template results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageTemplateProjection")]
    public partial class PageTemplateProjection : IEquatable<PageTemplateProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageTemplateProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageTemplateProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageTemplateProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageTemplateProjection(List<TemplateProjection> content = default(List<TemplateProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<TemplateProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageTemplateProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageTemplateProjection);
        }

        /// <summary>
        /// Returns true if PageTemplateProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageTemplateProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageTemplateProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageSmsProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated SMS messages. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageSmsProjection")]
    public partial class PageSmsProjection : IEquatable<PageSmsProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSmsProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageSmsProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSmsProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageSmsProjection(List<SmsProjection> content = default(List<SmsProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<SmsProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageSmsProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageSmsProjection);
        }

        /// <summary>
        /// Returns true if PageSmsProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageSmsProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageSmsProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageSentEmailWithQueueProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated sent email results for emails sent with queue. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full sent email entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageSentEmailWithQueueProjection")]
    public partial class PageSentEmailWithQueueProjection : IEquatable<PageSentEmailWithQueueProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSentEmailWithQueueProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageSentEmailWithQueueProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSentEmailWithQueueProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageSentEmailWithQueueProjection(List<SendWithQueueResult> content = default(List<SendWithQueueResult>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<SendWithQueueResult> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageSentEmailWithQueueProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageSentEmailWithQueueProjection);
        }

        /// <summary>
        /// Returns true if PageSentEmailWithQueueProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageSentEmailWithQueueProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageSentEmailWithQueueProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageSentEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated sent email results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full sent email entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageSentEmailProjection")]
    public partial class PageSentEmailProjection : IEquatable<PageSentEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSentEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageSentEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageSentEmailProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageSentEmailProjection(List<SentEmailProjection> content = default(List<SentEmailProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<SentEmailProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageSentEmailProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageSentEmailProjection);
        }

        /// <summary>
        /// Returns true if PageSentEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageSentEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageSentEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageScheduledJobs.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated scheduled jobs results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageScheduledJobs")]
    public partial class PageScheduledJobs : IEquatable<PageScheduledJobs>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageScheduledJobs" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageScheduledJobs() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageScheduledJobs" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageScheduledJobs(List<ScheduledJob> content = default(List<ScheduledJob>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ScheduledJob> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageScheduledJobs {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageScheduledJobs);
        }

        /// <summary>
        /// Returns true if PageScheduledJobs instances are equal
        /// </summary>
        /// <param name="input">Instance of PageScheduledJobs to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageScheduledJobs input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PagePhoneNumberProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated phone numbers. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PagePhoneNumberProjection")]
    public partial class PagePhoneNumberProjection : IEquatable<PagePhoneNumberProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PagePhoneNumberProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PagePhoneNumberProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PagePhoneNumberProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PagePhoneNumberProjection(List<PhoneNumberProjection> content = default(List<PhoneNumberProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<PhoneNumberProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PagePhoneNumberProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PagePhoneNumberProjection);
        }

        /// <summary>
        /// Returns true if PagePhoneNumberProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PagePhoneNumberProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PagePhoneNumberProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageOrganizationInboxProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated organization inbox results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageOrganizationInboxProjection")]
    public partial class PageOrganizationInboxProjection : IEquatable<PageOrganizationInboxProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageOrganizationInboxProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageOrganizationInboxProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageOrganizationInboxProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageOrganizationInboxProjection(List<OrganizationInboxProjection> content = default(List<OrganizationInboxProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<OrganizationInboxProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageOrganizationInboxProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageOrganizationInboxProjection);
        }

        /// <summary>
        /// Returns true if PageOrganizationInboxProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageOrganizationInboxProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageOrganizationInboxProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageMissedEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated MissedEmail results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageMissedEmailProjection")]
    public partial class PageMissedEmailProjection : IEquatable<PageMissedEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageMissedEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageMissedEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageMissedEmailProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageMissedEmailProjection(List<MissedEmailProjection> content = default(List<MissedEmailProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<MissedEmailProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageMissedEmailProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageMissedEmailProjection);
        }

        /// <summary>
        /// Returns true if PageMissedEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageMissedEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageMissedEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageListUnsubscribeRecipients.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated list unsubscribe recipients. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageListUnsubscribeRecipients")]
    public partial class PageListUnsubscribeRecipients : IEquatable<PageListUnsubscribeRecipients>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageListUnsubscribeRecipients" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageListUnsubscribeRecipients() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageListUnsubscribeRecipients" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageListUnsubscribeRecipients(List<ListUnsubscribeRecipientProjection> content = default(List<ListUnsubscribeRecipientProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ListUnsubscribeRecipientProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageListUnsubscribeRecipients {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageListUnsubscribeRecipients);
        }

        /// <summary>
        /// Returns true if PageListUnsubscribeRecipients instances are equal
        /// </summary>
        /// <param name="input">Instance of PageListUnsubscribeRecipients to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageListUnsubscribeRecipients input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxRulesetDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox ruleset results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxRulesetDto")]
    public partial class PageInboxRulesetDto : IEquatable<PageInboxRulesetDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxRulesetDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxRulesetDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxRulesetDto" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxRulesetDto(List<InboxRulesetDto> content = default(List<InboxRulesetDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxRulesetDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxRulesetDto {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxRulesetDto);
        }

        /// <summary>
        /// Returns true if PageInboxRulesetDto instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxRulesetDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxRulesetDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxReplierEvents.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox replier events. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxReplierEvents")]
    public partial class PageInboxReplierEvents : IEquatable<PageInboxReplierEvents>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxReplierEvents" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxReplierEvents() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxReplierEvents" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxReplierEvents(List<InboxReplierEventProjection> content = default(List<InboxReplierEventProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxReplierEventProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxReplierEvents {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxReplierEvents);
        }

        /// <summary>
        /// Returns true if PageInboxReplierEvents instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxReplierEvents to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxReplierEvents input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxReplierDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox replier results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxReplierDto")]
    public partial class PageInboxReplierDto : IEquatable<PageInboxReplierDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxReplierDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxReplierDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxReplierDto" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxReplierDto(List<InboxReplierDto> content = default(List<InboxReplierDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxReplierDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxReplierDto {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxReplierDto);
        }

        /// <summary>
        /// Returns true if PageInboxReplierDto instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxReplierDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxReplierDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxProjection")]
    public partial class PageInboxProjection : IEquatable<PageInboxProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxProjection(List<InboxPreview> content = default(List<InboxPreview>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxPreview> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxProjection);
        }

        /// <summary>
        /// Returns true if PageInboxProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxForwarderEvents.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox forwarder events. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxForwarderEvents")]
    public partial class PageInboxForwarderEvents : IEquatable<PageInboxForwarderEvents>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxForwarderEvents" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxForwarderEvents() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxForwarderEvents" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxForwarderEvents(List<InboxForwarderEventProjection> content = default(List<InboxForwarderEventProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxForwarderEventProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxForwarderEvents {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxForwarderEvents);
        }

        /// <summary>
        /// Returns true if PageInboxForwarderEvents instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxForwarderEvents to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxForwarderEvents input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageInboxForwarderDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox forwarder results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageInboxForwarderDto")]
    public partial class PageInboxForwarderDto : IEquatable<PageInboxForwarderDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxForwarderDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageInboxForwarderDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageInboxForwarderDto" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageInboxForwarderDto(List<InboxForwarderDto> content = default(List<InboxForwarderDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<InboxForwarderDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageInboxForwarderDto {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageInboxForwarderDto);
        }

        /// <summary>
        /// Returns true if PageInboxForwarderDto instances are equal
        /// </summary>
        /// <param name="input">Instance of PageInboxForwarderDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageInboxForwarderDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageGroupProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated missed email results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageGroupProjection")]
    public partial class PageGroupProjection : IEquatable<PageGroupProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageGroupProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageGroupProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageGroupProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageGroupProjection(List<GroupProjection> content = default(List<GroupProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<GroupProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageGroupProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageGroupProjection);
        }

        /// <summary>
        /// Returns true if PageGroupProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageGroupProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageGroupProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageExpiredInboxRecordProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated expired inbox results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageExpiredInboxRecordProjection")]
    public partial class PageExpiredInboxRecordProjection : IEquatable<PageExpiredInboxRecordProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageExpiredInboxRecordProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageExpiredInboxRecordProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageExpiredInboxRecordProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageExpiredInboxRecordProjection(List<ExpiredInboxRecordProjection> content = default(List<ExpiredInboxRecordProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ExpiredInboxRecordProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageExpiredInboxRecordProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageExpiredInboxRecordProjection);
        }

        /// <summary>
        /// Returns true if PageExpiredInboxRecordProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageExpiredInboxRecordProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageExpiredInboxRecordProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageEmailValidationRequest.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email validation request records. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageEmailValidationRequest")]
    public partial class PageEmailValidationRequest : IEquatable<PageEmailValidationRequest>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailValidationRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageEmailValidationRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailValidationRequest" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageEmailValidationRequest(List<EmailValidationRequestDto> content = default(List<EmailValidationRequestDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<EmailValidationRequestDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageEmailValidationRequest {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageEmailValidationRequest);
        }

        /// <summary>
        /// Returns true if PageEmailValidationRequest instances are equal
        /// </summary>
        /// <param name="input">Instance of PageEmailValidationRequest to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageEmailValidationRequest input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email projection results. EmailProjections and EmailPreviews are essentially the same but have legacy naming issues. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full email entity use the projection ID with individual method calls. For emails there are several methods for fetching message bodies and attachments.
    /// </summary>
    [DataContract(Name = "PageEmailProjection")]
    public partial class PageEmailProjection : IEquatable<PageEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageEmailProjection(List<EmailProjection> content = default(List<EmailProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<EmailProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageEmailProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageEmailProjection);
        }

        /// <summary>
        /// Returns true if PageEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageEmailPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email preview results. EmailProjections and EmailPreviews are essentially the same but have legacy naming issues. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls. For emails there are several methods for fetching message bodies and attachments.
    /// </summary>
    [DataContract(Name = "PageEmailPreview")]
    public partial class PageEmailPreview : IEquatable<PageEmailPreview>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageEmailPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageEmailPreview" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageEmailPreview(List<EmailPreview> content = default(List<EmailPreview>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<EmailPreview> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageEmailPreview {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageEmailPreview);
        }

        /// <summary>
        /// Returns true if PageEmailPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of PageEmailPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageEmailPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageDeliveryStatus.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated delivery status results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageDeliveryStatus")]
    public partial class PageDeliveryStatus : IEquatable<PageDeliveryStatus>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageDeliveryStatus" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageDeliveryStatus() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageDeliveryStatus" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageDeliveryStatus(List<DeliveryStatusDto> content = default(List<DeliveryStatusDto>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<DeliveryStatusDto> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageDeliveryStatus {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageDeliveryStatus);
        }

        /// <summary>
        /// Returns true if PageDeliveryStatus instances are equal
        /// </summary>
        /// <param name="input">Instance of PageDeliveryStatus to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageDeliveryStatus input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageContactProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated contact results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageContactProjection")]
    public partial class PageContactProjection : IEquatable<PageContactProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageContactProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageContactProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageContactProjection" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageContactProjection(List<ContactProjection> content = default(List<ContactProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ContactProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageContactProjection {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageContactProjection);
        }

        /// <summary>
        /// Returns true if PageContactProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of PageContactProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageContactProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageConnectorSyncEvents.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox connector sync events. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageConnectorSyncEvents")]
    public partial class PageConnectorSyncEvents : IEquatable<PageConnectorSyncEvents>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageConnectorSyncEvents" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageConnectorSyncEvents() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageConnectorSyncEvents" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageConnectorSyncEvents(List<ConnectorSyncEventProjection> content = default(List<ConnectorSyncEventProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ConnectorSyncEventProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageConnectorSyncEvents {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageConnectorSyncEvents);
        }

        /// <summary>
        /// Returns true if PageConnectorSyncEvents instances are equal
        /// </summary>
        /// <param name="input">Instance of PageConnectorSyncEvents to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageConnectorSyncEvents input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageConnector.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated inbox connectors. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageConnector")]
    public partial class PageConnector : IEquatable<PageConnector>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageConnector" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageConnector() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageConnector" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageConnector(List<ConnectorProjection> content = default(List<ConnectorProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<ConnectorProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageConnector {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageConnector);
        }

        /// <summary>
        /// Returns true if PageConnector instances are equal
        /// </summary>
        /// <param name="input">Instance of PageConnector to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageConnector input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageComplaint.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated complaint email. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageComplaint")]
    public partial class PageComplaint : IEquatable<PageComplaint>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageComplaint" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageComplaint() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageComplaint" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageComplaint(List<Complaint> content = default(List<Complaint>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<Complaint> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageComplaint {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageComplaint);
        }

        /// <summary>
        /// Returns true if PageComplaint instances are equal
        /// </summary>
        /// <param name="input">Instance of PageComplaint to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageComplaint input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageBouncedRecipients.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated bounced recipients. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageBouncedRecipients")]
    public partial class PageBouncedRecipients : IEquatable<PageBouncedRecipients>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageBouncedRecipients" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageBouncedRecipients() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageBouncedRecipients" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageBouncedRecipients(List<BounceRecipientProjection> content = default(List<BounceRecipientProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<BounceRecipientProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageBouncedRecipients {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageBouncedRecipients);
        }

        /// <summary>
        /// Returns true if PageBouncedRecipients instances are equal
        /// </summary>
        /// <param name="input">Instance of PageBouncedRecipients to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageBouncedRecipients input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageBouncedEmail.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated bounced email. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageBouncedEmail")]
    public partial class PageBouncedEmail : IEquatable<PageBouncedEmail>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageBouncedEmail" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageBouncedEmail() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageBouncedEmail" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageBouncedEmail(List<BounceProjection> content = default(List<BounceProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<BounceProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageBouncedEmail {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageBouncedEmail);
        }

        /// <summary>
        /// Returns true if PageBouncedEmail instances are equal
        /// </summary>
        /// <param name="input">Instance of PageBouncedEmail to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageBouncedEmail input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageAttachmentEntity.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated attachment entity results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageAttachmentEntity")]
    public partial class PageAttachmentEntity : IEquatable<PageAttachmentEntity>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageAttachmentEntity" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageAttachmentEntity() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageAttachmentEntity" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageAttachmentEntity(List<AttachmentProjection> content = default(List<AttachmentProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<AttachmentProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageAttachmentEntity {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageAttachmentEntity);
        }

        /// <summary>
        /// Returns true if PageAttachmentEntity instances are equal
        /// </summary>
        /// <param name="input">Instance of PageAttachmentEntity to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageAttachmentEntity input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/PageAlias.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Paginated email alias results. Page index starts at zero. Projection results may omit larger entity fields. For fetching a full entity use the projection ID with individual method calls.
    /// </summary>
    [DataContract(Name = "PageAlias")]
    public partial class PageAlias : IEquatable<PageAlias>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PageAlias" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected PageAlias() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="PageAlias" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        /// <param name="pageable">pageable.</param>
        /// <param name="totalPages">totalPages (required).</param>
        /// <param name="totalElements">totalElements (required).</param>
        /// <param name="last">last.</param>
        /// <param name="numberOfElements">numberOfElements.</param>
        /// <param name="first">first.</param>
        /// <param name="size">size.</param>
        /// <param name="number">number.</param>
        /// <param name="sort">sort.</param>
        /// <param name="empty">empty.</param>
        public PageAlias(List<AliasProjection> content = default(List<AliasProjection>), PageableObject pageable = default(PageableObject), int totalPages = default(int), long totalElements = default(long), bool last = default(bool), int numberOfElements = default(int), bool first = default(bool), int size = default(int), int number = default(int), SortObject sort = default(SortObject), bool empty = default(bool))
        {
            this.TotalPages = totalPages;
            this.TotalElements = totalElements;
            this.Content = content;
            this.Pageable = pageable;
            this.Last = last;
            this.NumberOfElements = numberOfElements;
            this.First = first;
            this.Size = size;
            this.Number = number;
            this.Sort = sort;
            this.Empty = empty;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public List<AliasProjection> Content { get; set; }

        /// <summary>
        /// Gets or Sets Pageable
        /// </summary>
        [DataMember(Name = "pageable", EmitDefaultValue = false)]
        public PageableObject Pageable { get; set; }

        /// <summary>
        /// Gets or Sets TotalPages
        /// </summary>
        [DataMember(Name = "totalPages", IsRequired = true, EmitDefaultValue = true)]
        public int TotalPages { get; set; }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Gets or Sets Last
        /// </summary>
        [DataMember(Name = "last", EmitDefaultValue = true)]
        public bool Last { get; set; }

        /// <summary>
        /// Gets or Sets NumberOfElements
        /// </summary>
        [DataMember(Name = "numberOfElements", EmitDefaultValue = false)]
        public int NumberOfElements { get; set; }

        /// <summary>
        /// Gets or Sets First
        /// </summary>
        [DataMember(Name = "first", EmitDefaultValue = true)]
        public bool First { get; set; }

        /// <summary>
        /// Gets or Sets Size
        /// </summary>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public int Size { get; set; }

        /// <summary>
        /// Gets or Sets Number
        /// </summary>
        [DataMember(Name = "number", EmitDefaultValue = false)]
        public int Number { get; set; }

        /// <summary>
        /// Gets or Sets Sort
        /// </summary>
        [DataMember(Name = "sort", EmitDefaultValue = false)]
        public SortObject Sort { get; set; }

        /// <summary>
        /// Gets or Sets Empty
        /// </summary>
        [DataMember(Name = "empty", EmitDefaultValue = true)]
        public bool Empty { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class PageAlias {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Pageable: ").Append(Pageable).Append("\n");
            sb.Append("  TotalPages: ").Append(TotalPages).Append("\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("  Last: ").Append(Last).Append("\n");
            sb.Append("  NumberOfElements: ").Append(NumberOfElements).Append("\n");
            sb.Append("  First: ").Append(First).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Number: ").Append(Number).Append("\n");
            sb.Append("  Sort: ").Append(Sort).Append("\n");
            sb.Append("  Empty: ").Append(Empty).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as PageAlias);
        }

        /// <summary>
        /// Returns true if PageAlias instances are equal
        /// </summary>
        /// <param name="input">Instance of PageAlias to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(PageAlias input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    this.Content != null &&
                    input.Content != null &&
                    this.Content.SequenceEqual(input.Content)
                ) && 
                (
                    this.Pageable == input.Pageable ||
                    (this.Pageable != null &&
                    this.Pageable.Equals(input.Pageable))
                ) && 
                (
                    this.TotalPages == input.TotalPages ||
                    this.TotalPages.Equals(input.TotalPages)
                ) && 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                ) && 
                (
                    this.Last == input.Last ||
                    this.Last.Equals(input.Last)
                ) && 
                (
                    this.NumberOfElements == input.NumberOfElements ||
                    this.NumberOfElements.Equals(input.NumberOfElements)
                ) && 
                (
                    this.First == input.First ||
                    this.First.Equals(input.First)
                ) && 
                (
                    this.Size == input.Size ||
                    this.Size.Equals(input.Size)
                ) && 
                (
                    this.Number == input.Number ||
                    this.Number.Equals(input.Number)
                ) && 
                (
                    this.Sort == input.Sort ||
                    (this.Sort != null &&
                    this.Sort.Equals(input.Sort))
                ) && 
                (
                    this.Empty == input.Empty ||
                    this.Empty.Equals(input.Empty)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Pageable != null)
                {
                    hashCode = (hashCode * 59) + this.Pageable.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TotalPages.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                hashCode = (hashCode * 59) + this.Last.GetHashCode();
                hashCode = (hashCode * 59) + this.NumberOfElements.GetHashCode();
                hashCode = (hashCode * 59) + this.First.GetHashCode();
                hashCode = (hashCode * 59) + this.Size.GetHashCode();
                hashCode = (hashCode * 59) + this.Number.GetHashCode();
                if (this.Sort != null)
                {
                    hashCode = (hashCode * 59) + this.Sort.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Empty.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/OrganizationInboxProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Organization team inbox
    /// </summary>
    [DataContract(Name = "OrganizationInboxProjection")]
    public partial class OrganizationInboxProjection : IEquatable<OrganizationInboxProjection>, IValidatableObject
    {
        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPINBOX for value: SMTP_INBOX
            /// </summary>
            [EnumMember(Value = "SMTP_INBOX")]
            SMTPINBOX = 2

        }


        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [DataMember(Name = "inboxType", EmitDefaultValue = true)]
        public InboxTypeEnum? InboxType { get; set; }
        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FunctionsAsEnum
        {
            /// <summary>
            /// Enum ALIAS for value: ALIAS
            /// </summary>
            [EnumMember(Value = "ALIAS")]
            ALIAS = 1,

            /// <summary>
            /// Enum THREAD for value: THREAD
            /// </summary>
            [EnumMember(Value = "THREAD")]
            THREAD = 2,

            /// <summary>
            /// Enum CATCHALL for value: CATCH_ALL
            /// </summary>
            [EnumMember(Value = "CATCH_ALL")]
            CATCHALL = 3,

            /// <summary>
            /// Enum CONNECTOR for value: CONNECTOR
            /// </summary>
            [EnumMember(Value = "CONNECTOR")]
            CONNECTOR = 4

        }


        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [DataMember(Name = "functionsAs", EmitDefaultValue = true)]
        public FunctionsAsEnum? FunctionsAs { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="OrganizationInboxProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected OrganizationInboxProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="OrganizationInboxProjection" /> class.
        /// </summary>
        /// <param name="id">ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically. (required).</param>
        /// <param name="domainId">ID of custom domain used by the inbox if any.</param>
        /// <param name="createdAt">When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;. (required).</param>
        /// <param name="name">Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search.</param>
        /// <param name="emailAddress">The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID..</param>
        /// <param name="favourite">Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering (required).</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI..</param>
        /// <param name="teamAccess">Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/ (required).</param>
        /// <param name="inboxType">Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send)..</param>
        /// <param name="readOnly">Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes. (required).</param>
        /// <param name="virtualInbox">Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions. (required).</param>
        /// <param name="functionsAs">Inbox function if used as a primitive for another system..</param>
        public OrganizationInboxProjection(Guid id = default(Guid), Guid? domainId = default(Guid?), DateTime createdAt = default(DateTime), string name = default(string), string emailAddress = default(string), bool favourite = default(bool), List<string> tags = default(List<string>), bool teamAccess = default(bool), InboxTypeEnum? inboxType = default(InboxTypeEnum?), bool readOnly = default(bool), bool virtualInbox = default(bool), FunctionsAsEnum? functionsAs = default(FunctionsAsEnum?))
        {
            this.Id = id;
            this.CreatedAt = createdAt;
            this.Favourite = favourite;
            this.TeamAccess = teamAccess;
            this.ReadOnly = readOnly;
            this.VirtualInbox = virtualInbox;
            this.DomainId = domainId;
            this.Name = name;
            this.EmailAddress = emailAddress;
            this.Tags = tags;
            this.InboxType = inboxType;
            this.FunctionsAs = functionsAs;
        }

        /// <summary>
        /// ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.
        /// </summary>
        /// <value>ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// ID of custom domain used by the inbox if any
        /// </summary>
        /// <value>ID of custom domain used by the inbox if any</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.
        /// </summary>
        /// <value>When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search
        /// </summary>
        /// <value>Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.
        /// </summary>
        /// <value>The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.</value>
        [DataMember(Name = "emailAddress", EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "favourite", IsRequired = true, EmitDefaultValue = true)]
        public bool Favourite { get; set; }

        /// <summary>
        /// Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.
        /// </summary>
        /// <value>Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/
        /// </summary>
        /// <value>Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/</value>
        [DataMember(Name = "teamAccess", IsRequired = true, EmitDefaultValue = true)]
        public bool TeamAccess { get; set; }

        /// <summary>
        /// Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes.
        /// </summary>
        /// <value>Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes.</value>
        [DataMember(Name = "readOnly", IsRequired = true, EmitDefaultValue = true)]
        public bool ReadOnly { get; set; }

        /// <summary>
        /// Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.
        /// </summary>
        /// <value>Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.</value>
        [DataMember(Name = "virtualInbox", IsRequired = true, EmitDefaultValue = true)]
        public bool VirtualInbox { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class OrganizationInboxProjection {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  TeamAccess: ").Append(TeamAccess).Append("\n");
            sb.Append("  InboxType: ").Append(InboxType).Append("\n");
            sb.Append("  ReadOnly: ").Append(ReadOnly).Append("\n");
            sb.Append("  VirtualInbox: ").Append(VirtualInbox).Append("\n");
            sb.Append("  FunctionsAs: ").Append(FunctionsAs).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as OrganizationInboxProjection);
        }

        /// <summary>
        /// Returns true if OrganizationInboxProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of OrganizationInboxProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(OrganizationInboxProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    this.Favourite.Equals(input.Favourite)
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.TeamAccess == input.TeamAccess ||
                    this.TeamAccess.Equals(input.TeamAccess)
                ) && 
                (
                    this.InboxType == input.InboxType ||
                    this.InboxType.Equals(input.InboxType)
                ) && 
                (
                    this.ReadOnly == input.ReadOnly ||
                    this.ReadOnly.Equals(input.ReadOnly)
                ) && 
                (
                    this.VirtualInbox == input.VirtualInbox ||
                    this.VirtualInbox.Equals(input.VirtualInbox)
                ) && 
                (
                    this.FunctionsAs == input.FunctionsAs ||
                    this.FunctionsAs.Equals(input.FunctionsAs)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TeamAccess.GetHashCode();
                hashCode = (hashCode * 59) + this.InboxType.GetHashCode();
                hashCode = (hashCode * 59) + this.ReadOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.VirtualInbox.GetHashCode();
                hashCode = (hashCode * 59) + this.FunctionsAs.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/NewFakeEmailAddressResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// NewFakeEmailAddressResult
    /// </summary>
    [DataContract(Name = "NewFakeEmailAddressResult")]
    public partial class NewFakeEmailAddressResult : IEquatable<NewFakeEmailAddressResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="NewFakeEmailAddressResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected NewFakeEmailAddressResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="NewFakeEmailAddressResult" /> class.
        /// </summary>
        /// <param name="emailAddress">emailAddress (required).</param>
        public NewFakeEmailAddressResult(string emailAddress = default(string))
        {
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for NewFakeEmailAddressResult and cannot be null");
            }
            this.EmailAddress = emailAddress;
        }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class NewFakeEmailAddressResult {\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as NewFakeEmailAddressResult);
        }

        /// <summary>
        /// Returns true if NewFakeEmailAddressResult instances are equal
        /// </summary>
        /// <param name="input">Instance of NewFakeEmailAddressResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(NewFakeEmailAddressResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/NameServerRecord.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Name Server Record
    /// </summary>
    [DataContract(Name = "NameServerRecord")]
    public partial class NameServerRecord : IEquatable<NameServerRecord>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="NameServerRecord" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected NameServerRecord() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="NameServerRecord" /> class.
        /// </summary>
        /// <param name="raw">raw (required).</param>
        /// <param name="recordType">recordType (required).</param>
        /// <param name="priority">priority (required).</param>
        /// <param name="value">value (required).</param>
        public NameServerRecord(string raw = default(string), string recordType = default(string), string priority = default(string), string value = default(string))
        {
            // to ensure "raw" is required (not null)
            if (raw == null)
            {
                throw new ArgumentNullException("raw is a required property for NameServerRecord and cannot be null");
            }
            this.Raw = raw;
            // to ensure "recordType" is required (not null)
            if (recordType == null)
            {
                throw new ArgumentNullException("recordType is a required property for NameServerRecord and cannot be null");
            }
            this.RecordType = recordType;
            // to ensure "priority" is required (not null)
            if (priority == null)
            {
                throw new ArgumentNullException("priority is a required property for NameServerRecord and cannot be null");
            }
            this.Priority = priority;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for NameServerRecord and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Gets or Sets Raw
        /// </summary>
        [DataMember(Name = "raw", IsRequired = true, EmitDefaultValue = true)]
        public string Raw { get; set; }

        /// <summary>
        /// Gets or Sets RecordType
        /// </summary>
        [DataMember(Name = "recordType", IsRequired = true, EmitDefaultValue = true)]
        public string RecordType { get; set; }

        /// <summary>
        /// Gets or Sets Priority
        /// </summary>
        [DataMember(Name = "priority", IsRequired = true, EmitDefaultValue = true)]
        public string Priority { get; set; }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class NameServerRecord {\n");
            sb.Append("  Raw: ").Append(Raw).Append("\n");
            sb.Append("  RecordType: ").Append(RecordType).Append("\n");
            sb.Append("  Priority: ").Append(Priority).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as NameServerRecord);
        }

        /// <summary>
        /// Returns true if NameServerRecord instances are equal
        /// </summary>
        /// <param name="input">Instance of NameServerRecord to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(NameServerRecord input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Raw == input.Raw ||
                    (this.Raw != null &&
                    this.Raw.Equals(input.Raw))
                ) && 
                (
                    this.RecordType == input.RecordType ||
                    (this.RecordType != null &&
                    this.RecordType.Equals(input.RecordType))
                ) && 
                (
                    this.Priority == input.Priority ||
                    (this.Priority != null &&
                    this.Priority.Equals(input.Priority))
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Raw != null)
                {
                    hashCode = (hashCode * 59) + this.Raw.GetHashCode();
                }
                if (this.RecordType != null)
                {
                    hashCode = (hashCode * 59) + this.RecordType.GetHashCode();
                }
                if (this.Priority != null)
                {
                    hashCode = (hashCode * 59) + this.Priority.GetHashCode();
                }
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/MissedEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Missed email data
    /// </summary>
    [DataContract(Name = "MissedEmailProjection")]
    public partial class MissedEmailProjection : IEquatable<MissedEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected MissedEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="userId">userId.</param>
        /// <param name="subject">subject.</param>
        /// <param name="id">id (required).</param>
        /// <param name="from">from.</param>
        public MissedEmailProjection(DateTime createdAt = default(DateTime), Guid? userId = default(Guid?), string subject = default(string), Guid id = default(Guid), string from = default(string))
        {
            this.CreatedAt = createdAt;
            this.Id = id;
            this.UserId = userId;
            this.Subject = subject;
            this.From = from;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class MissedEmailProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as MissedEmailProjection);
        }

        /// <summary>
        /// Returns true if MissedEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of MissedEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(MissedEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/MissedEmailDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Missed email
    /// </summary>
    [DataContract(Name = "MissedEmailDto")]
    public partial class MissedEmailDto : IEquatable<MissedEmailDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected MissedEmailDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId.</param>
        /// <param name="subject">subject.</param>
        /// <param name="bodyExcerpt">bodyExcerpt.</param>
        /// <param name="attachmentCount">attachmentCount (required).</param>
        /// <param name="from">from.</param>
        /// <param name="rawUrl">rawUrl.</param>
        /// <param name="rawKey">rawKey.</param>
        /// <param name="rawBucket">rawBucket.</param>
        /// <param name="canRestore">canRestore.</param>
        /// <param name="to">to (required).</param>
        /// <param name="cc">cc (required).</param>
        /// <param name="bcc">bcc (required).</param>
        /// <param name="inboxIds">inboxIds (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public MissedEmailDto(Guid id = default(Guid), Guid? userId = default(Guid?), string subject = default(string), string bodyExcerpt = default(string), int attachmentCount = default(int), string from = default(string), string rawUrl = default(string), string rawKey = default(string), string rawBucket = default(string), bool? canRestore = default(bool?), List<string> to = default(List<string>), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), List<Guid> inboxIds = default(List<Guid>), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.AttachmentCount = attachmentCount;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for MissedEmailDto and cannot be null");
            }
            this.To = to;
            // to ensure "cc" is required (not null)
            if (cc == null)
            {
                throw new ArgumentNullException("cc is a required property for MissedEmailDto and cannot be null");
            }
            this.Cc = cc;
            // to ensure "bcc" is required (not null)
            if (bcc == null)
            {
                throw new ArgumentNullException("bcc is a required property for MissedEmailDto and cannot be null");
            }
            this.Bcc = bcc;
            // to ensure "inboxIds" is required (not null)
            if (inboxIds == null)
            {
                throw new ArgumentNullException("inboxIds is a required property for MissedEmailDto and cannot be null");
            }
            this.InboxIds = inboxIds;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.UserId = userId;
            this.Subject = subject;
            this.BodyExcerpt = bodyExcerpt;
            this.From = from;
            this.RawUrl = rawUrl;
            this.RawKey = rawKey;
            this.RawBucket = rawBucket;
            this.CanRestore = canRestore;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets BodyExcerpt
        /// </summary>
        [DataMember(Name = "bodyExcerpt", EmitDefaultValue = true)]
        public string BodyExcerpt { get; set; }

        /// <summary>
        /// Gets or Sets AttachmentCount
        /// </summary>
        [DataMember(Name = "attachmentCount", IsRequired = true, EmitDefaultValue = true)]
        public int AttachmentCount { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Gets or Sets RawUrl
        /// </summary>
        [DataMember(Name = "rawUrl", EmitDefaultValue = true)]
        public string RawUrl { get; set; }

        /// <summary>
        /// Gets or Sets RawKey
        /// </summary>
        [DataMember(Name = "rawKey", EmitDefaultValue = true)]
        public string RawKey { get; set; }

        /// <summary>
        /// Gets or Sets RawBucket
        /// </summary>
        [DataMember(Name = "rawBucket", EmitDefaultValue = true)]
        public string RawBucket { get; set; }

        /// <summary>
        /// Gets or Sets CanRestore
        /// </summary>
        [DataMember(Name = "canRestore", EmitDefaultValue = true)]
        public bool? CanRestore { get; set; }

        /// <summary>
        /// Gets or Sets To
        /// </summary>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Gets or Sets Cc
        /// </summary>
        [DataMember(Name = "cc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Gets or Sets Bcc
        /// </summary>
        [DataMember(Name = "bcc", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Gets or Sets InboxIds
        /// </summary>
        [DataMember(Name = "inboxIds", IsRequired = true, EmitDefaultValue = true)]
        public List<Guid> InboxIds { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class MissedEmailDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  BodyExcerpt: ").Append(BodyExcerpt).Append("\n");
            sb.Append("  AttachmentCount: ").Append(AttachmentCount).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  RawUrl: ").Append(RawUrl).Append("\n");
            sb.Append("  RawKey: ").Append(RawKey).Append("\n");
            sb.Append("  RawBucket: ").Append(RawBucket).Append("\n");
            sb.Append("  CanRestore: ").Append(CanRestore).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  InboxIds: ").Append(InboxIds).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as MissedEmailDto);
        }

        /// <summary>
        /// Returns true if MissedEmailDto instances are equal
        /// </summary>
        /// <param name="input">Instance of MissedEmailDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(MissedEmailDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.BodyExcerpt == input.BodyExcerpt ||
                    (this.BodyExcerpt != null &&
                    this.BodyExcerpt.Equals(input.BodyExcerpt))
                ) && 
                (
                    this.AttachmentCount == input.AttachmentCount ||
                    this.AttachmentCount.Equals(input.AttachmentCount)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.RawUrl == input.RawUrl ||
                    (this.RawUrl != null &&
                    this.RawUrl.Equals(input.RawUrl))
                ) && 
                (
                    this.RawKey == input.RawKey ||
                    (this.RawKey != null &&
                    this.RawKey.Equals(input.RawKey))
                ) && 
                (
                    this.RawBucket == input.RawBucket ||
                    (this.RawBucket != null &&
                    this.RawBucket.Equals(input.RawBucket))
                ) && 
                (
                    this.CanRestore == input.CanRestore ||
                    (this.CanRestore != null &&
                    this.CanRestore.Equals(input.CanRestore))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.InboxIds == input.InboxIds ||
                    this.InboxIds != null &&
                    input.InboxIds != null &&
                    this.InboxIds.SequenceEqual(input.InboxIds)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.BodyExcerpt != null)
                {
                    hashCode = (hashCode * 59) + this.BodyExcerpt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.AttachmentCount.GetHashCode();
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.RawUrl != null)
                {
                    hashCode = (hashCode * 59) + this.RawUrl.GetHashCode();
                }
                if (this.RawKey != null)
                {
                    hashCode = (hashCode * 59) + this.RawKey.GetHashCode();
                }
                if (this.RawBucket != null)
                {
                    hashCode = (hashCode * 59) + this.RawBucket.GetHashCode();
                }
                if (this.CanRestore != null)
                {
                    hashCode = (hashCode * 59) + this.CanRestore.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.InboxIds != null)
                {
                    hashCode = (hashCode * 59) + this.InboxIds.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/MatchOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Optional filter for matching emails based on fields. For instance filter results to only include emails whose &#x60;SUBJECT&#x60; value does &#x60;CONTAIN&#x60; given match value. An example payload would be &#x60;{ matches: [{ field: &#39;SUBJECT&#39;, should: &#39;CONTAIN&#39;, value: &#39;Welcome&#39; }] }&#x60;. You can also pass conditions such as &#x60;HAS_ATTACHMENT&#x60;. If you wish to extract regex matches inside the email content see the &#x60;getEmailContentMatch&#x60; method in the EmailController.
    /// </summary>
    [DataContract(Name = "MatchOptions")]
    public partial class MatchOptions : IEquatable<MatchOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MatchOptions" /> class.
        /// </summary>
        /// <param name="matches">Zero or more match options such as &#x60;{ field: &#39;SUBJECT&#39;, should: &#39;CONTAIN&#39;, value: &#39;Welcome&#39; }&#x60;. Options are additive so if one does not match the email is excluded from results.</param>
        /// <param name="conditions">Zero or more conditions such as &#x60;{ condition: &#39;HAS_ATTACHMENTS&#39;, value: &#39;TRUE&#39; }&#x60;. Note the values are the strings &#x60;TRUE|FALSE&#x60; not booleans..</param>
        public MatchOptions(List<MatchOption> matches = default(List<MatchOption>), List<ConditionOption> conditions = default(List<ConditionOption>))
        {
            this.Matches = matches;
            this.Conditions = conditions;
        }

        /// <summary>
        /// Zero or more match options such as &#x60;{ field: &#39;SUBJECT&#39;, should: &#39;CONTAIN&#39;, value: &#39;Welcome&#39; }&#x60;. Options are additive so if one does not match the email is excluded from results
        /// </summary>
        /// <value>Zero or more match options such as &#x60;{ field: &#39;SUBJECT&#39;, should: &#39;CONTAIN&#39;, value: &#39;Welcome&#39; }&#x60;. Options are additive so if one does not match the email is excluded from results</value>
        [DataMember(Name = "matches", EmitDefaultValue = true)]
        public List<MatchOption> Matches { get; set; }

        /// <summary>
        /// Zero or more conditions such as &#x60;{ condition: &#39;HAS_ATTACHMENTS&#39;, value: &#39;TRUE&#39; }&#x60;. Note the values are the strings &#x60;TRUE|FALSE&#x60; not booleans.
        /// </summary>
        /// <value>Zero or more conditions such as &#x60;{ condition: &#39;HAS_ATTACHMENTS&#39;, value: &#39;TRUE&#39; }&#x60;. Note the values are the strings &#x60;TRUE|FALSE&#x60; not booleans.</value>
        [DataMember(Name = "conditions", EmitDefaultValue = true)]
        public List<ConditionOption> Conditions { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class MatchOptions {\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("  Conditions: ").Append(Conditions).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as MatchOptions);
        }

        /// <summary>
        /// Returns true if MatchOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of MatchOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(MatchOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Matches == input.Matches ||
                    this.Matches != null &&
                    input.Matches != null &&
                    this.Matches.SequenceEqual(input.Matches)
                ) && 
                (
                    this.Conditions == input.Conditions ||
                    this.Conditions != null &&
                    input.Conditions != null &&
                    this.Conditions.SequenceEqual(input.Conditions)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Matches != null)
                {
                    hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                }
                if (this.Conditions != null)
                {
                    hashCode = (hashCode * 59) + this.Conditions.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/MatchOption.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for matching emails in an inbox. Each match option object contains a &#x60;field&#x60;, &#x60;should&#x60; and &#x60;value&#x60; property. Together they form logical conditions such as &#x60;SUBJECT&#x60; should &#x60;CONTAIN&#x60; value.
    /// </summary>
    [DataContract(Name = "MatchOption")]
    public partial class MatchOption : IEquatable<MatchOption>, IValidatableObject
    {
        /// <summary>
        /// Fields of an email object that can be used to filter results
        /// </summary>
        /// <value>Fields of an email object that can be used to filter results</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 1,

            /// <summary>
            /// Enum TO for value: TO
            /// </summary>
            [EnumMember(Value = "TO")]
            TO = 2,

            /// <summary>
            /// Enum BCC for value: BCC
            /// </summary>
            [EnumMember(Value = "BCC")]
            BCC = 3,

            /// <summary>
            /// Enum CC for value: CC
            /// </summary>
            [EnumMember(Value = "CC")]
            CC = 4,

            /// <summary>
            /// Enum FROM for value: FROM
            /// </summary>
            [EnumMember(Value = "FROM")]
            FROM = 5,

            /// <summary>
            /// Enum HEADERS for value: HEADERS
            /// </summary>
            [EnumMember(Value = "HEADERS")]
            HEADERS = 6

        }


        /// <summary>
        /// Fields of an email object that can be used to filter results
        /// </summary>
        /// <value>Fields of an email object that can be used to filter results</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// How the value of the email field specified should be compared to the value given in the match options.
        /// </summary>
        /// <value>How the value of the email field specified should be compared to the value given in the match options.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ShouldEnum
        {
            /// <summary>
            /// Enum MATCH for value: MATCH
            /// </summary>
            [EnumMember(Value = "MATCH")]
            MATCH = 1,

            /// <summary>
            /// Enum CONTAIN for value: CONTAIN
            /// </summary>
            [EnumMember(Value = "CONTAIN")]
            CONTAIN = 2,

            /// <summary>
            /// Enum EQUAL for value: EQUAL
            /// </summary>
            [EnumMember(Value = "EQUAL")]
            EQUAL = 3

        }


        /// <summary>
        /// How the value of the email field specified should be compared to the value given in the match options.
        /// </summary>
        /// <value>How the value of the email field specified should be compared to the value given in the match options.</value>
        [DataMember(Name = "should", IsRequired = true, EmitDefaultValue = true)]
        public ShouldEnum Should { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="MatchOption" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected MatchOption() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="MatchOption" /> class.
        /// </summary>
        /// <param name="field">Fields of an email object that can be used to filter results (required).</param>
        /// <param name="should">How the value of the email field specified should be compared to the value given in the match options. (required).</param>
        /// <param name="value">The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed. (required).</param>
        public MatchOption(FieldEnum field = default(FieldEnum), ShouldEnum should = default(ShouldEnum), string value = default(string))
        {
            this.Field = field;
            this.Should = should;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for MatchOption and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed.
        /// </summary>
        /// <value>The value you wish to compare with the value of the field specified using the &#x60;should&#x60; value passed. For example &#x60;BODY&#x60; should &#x60;CONTAIN&#x60; a value passed.</value>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class MatchOption {\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Should: ").Append(Should).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as MatchOption);
        }

        /// <summary>
        /// Returns true if MatchOption instances are equal
        /// </summary>
        /// <param name="input">Instance of MatchOption to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(MatchOption input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Should == input.Should ||
                    this.Should.Equals(input.Should)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                hashCode = (hashCode * 59) + this.Should.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupTlsReportingDomainResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupTlsReportingDomainResults
    /// </summary>
    [DataContract(Name = "LookupTlsReportingDomainResults")]
    public partial class LookupTlsReportingDomainResults : IEquatable<LookupTlsReportingDomainResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupTlsReportingDomainResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupTlsReportingDomainResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupTlsReportingDomainResults" /> class.
        /// </summary>
        /// <param name="valid">valid (required).</param>
        /// <param name="query">query (required).</param>
        /// <param name="records">records (required).</param>
        /// <param name="errors">errors (required).</param>
        /// <param name="warnings">warnings (required).</param>
        public LookupTlsReportingDomainResults(bool valid = default(bool), DNSLookupOptions query = default(DNSLookupOptions), List<DNSLookupResult> records = default(List<DNSLookupResult>), List<string> errors = default(List<string>), List<string> warnings = default(List<string>))
        {
            this.Valid = valid;
            // to ensure "query" is required (not null)
            if (query == null)
            {
                throw new ArgumentNullException("query is a required property for LookupTlsReportingDomainResults and cannot be null");
            }
            this.Query = query;
            // to ensure "records" is required (not null)
            if (records == null)
            {
                throw new ArgumentNullException("records is a required property for LookupTlsReportingDomainResults and cannot be null");
            }
            this.Records = records;
            // to ensure "errors" is required (not null)
            if (errors == null)
            {
                throw new ArgumentNullException("errors is a required property for LookupTlsReportingDomainResults and cannot be null");
            }
            this.Errors = errors;
            // to ensure "warnings" is required (not null)
            if (warnings == null)
            {
                throw new ArgumentNullException("warnings is a required property for LookupTlsReportingDomainResults and cannot be null");
            }
            this.Warnings = warnings;
        }

        /// <summary>
        /// Gets or Sets Valid
        /// </summary>
        [DataMember(Name = "valid", IsRequired = true, EmitDefaultValue = true)]
        public bool Valid { get; set; }

        /// <summary>
        /// Gets or Sets Query
        /// </summary>
        [DataMember(Name = "query", IsRequired = true, EmitDefaultValue = true)]
        public DNSLookupOptions Query { get; set; }

        /// <summary>
        /// Gets or Sets Records
        /// </summary>
        [DataMember(Name = "records", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupResult> Records { get; set; }

        /// <summary>
        /// Gets or Sets Errors
        /// </summary>
        [DataMember(Name = "errors", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Errors { get; set; }

        /// <summary>
        /// Gets or Sets Warnings
        /// </summary>
        [DataMember(Name = "warnings", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Warnings { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupTlsReportingDomainResults {\n");
            sb.Append("  Valid: ").Append(Valid).Append("\n");
            sb.Append("  Query: ").Append(Query).Append("\n");
            sb.Append("  Records: ").Append(Records).Append("\n");
            sb.Append("  Errors: ").Append(Errors).Append("\n");
            sb.Append("  Warnings: ").Append(Warnings).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupTlsReportingDomainResults);
        }

        /// <summary>
        /// Returns true if LookupTlsReportingDomainResults instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupTlsReportingDomainResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupTlsReportingDomainResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Valid == input.Valid ||
                    this.Valid.Equals(input.Valid)
                ) && 
                (
                    this.Query == input.Query ||
                    (this.Query != null &&
                    this.Query.Equals(input.Query))
                ) && 
                (
                    this.Records == input.Records ||
                    this.Records != null &&
                    input.Records != null &&
                    this.Records.SequenceEqual(input.Records)
                ) && 
                (
                    this.Errors == input.Errors ||
                    this.Errors != null &&
                    input.Errors != null &&
                    this.Errors.SequenceEqual(input.Errors)
                ) && 
                (
                    this.Warnings == input.Warnings ||
                    this.Warnings != null &&
                    input.Warnings != null &&
                    this.Warnings.SequenceEqual(input.Warnings)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Valid.GetHashCode();
                if (this.Query != null)
                {
                    hashCode = (hashCode * 59) + this.Query.GetHashCode();
                }
                if (this.Records != null)
                {
                    hashCode = (hashCode * 59) + this.Records.GetHashCode();
                }
                if (this.Errors != null)
                {
                    hashCode = (hashCode * 59) + this.Errors.GetHashCode();
                }
                if (this.Warnings != null)
                {
                    hashCode = (hashCode * 59) + this.Warnings.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupTlsReportingDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupTlsReportingDomainOptions
    /// </summary>
    [DataContract(Name = "LookupTlsReportingDomainOptions")]
    public partial class LookupTlsReportingDomainOptions : IEquatable<LookupTlsReportingDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupTlsReportingDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupTlsReportingDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupTlsReportingDomainOptions" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        public LookupTlsReportingDomainOptions(string host = default(string))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for LookupTlsReportingDomainOptions and cannot be null");
            }
            this.Host = host;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupTlsReportingDomainOptions {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupTlsReportingDomainOptions);
        }

        /// <summary>
        /// Returns true if LookupTlsReportingDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupTlsReportingDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupTlsReportingDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupMtaStsDomainResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupMtaStsDomainResults
    /// </summary>
    [DataContract(Name = "LookupMtaStsDomainResults")]
    public partial class LookupMtaStsDomainResults : IEquatable<LookupMtaStsDomainResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupMtaStsDomainResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupMtaStsDomainResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupMtaStsDomainResults" /> class.
        /// </summary>
        /// <param name="valid">valid (required).</param>
        /// <param name="query">query (required).</param>
        /// <param name="records">records (required).</param>
        /// <param name="wellKnownQuery">wellKnownQuery (required).</param>
        /// <param name="wellKnownPresent">wellKnownPresent (required).</param>
        /// <param name="wellKnownValue">wellKnownValue (required).</param>
        /// <param name="errors">errors (required).</param>
        /// <param name="warnings">warnings (required).</param>
        public LookupMtaStsDomainResults(bool valid = default(bool), DNSLookupOptions query = default(DNSLookupOptions), List<DNSLookupResult> records = default(List<DNSLookupResult>), string wellKnownQuery = default(string), bool wellKnownPresent = default(bool), string wellKnownValue = default(string), List<string> errors = default(List<string>), List<string> warnings = default(List<string>))
        {
            this.Valid = valid;
            // to ensure "query" is required (not null)
            if (query == null)
            {
                throw new ArgumentNullException("query is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.Query = query;
            // to ensure "records" is required (not null)
            if (records == null)
            {
                throw new ArgumentNullException("records is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.Records = records;
            // to ensure "wellKnownQuery" is required (not null)
            if (wellKnownQuery == null)
            {
                throw new ArgumentNullException("wellKnownQuery is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.WellKnownQuery = wellKnownQuery;
            this.WellKnownPresent = wellKnownPresent;
            // to ensure "wellKnownValue" is required (not null)
            if (wellKnownValue == null)
            {
                throw new ArgumentNullException("wellKnownValue is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.WellKnownValue = wellKnownValue;
            // to ensure "errors" is required (not null)
            if (errors == null)
            {
                throw new ArgumentNullException("errors is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.Errors = errors;
            // to ensure "warnings" is required (not null)
            if (warnings == null)
            {
                throw new ArgumentNullException("warnings is a required property for LookupMtaStsDomainResults and cannot be null");
            }
            this.Warnings = warnings;
        }

        /// <summary>
        /// Gets or Sets Valid
        /// </summary>
        [DataMember(Name = "valid", IsRequired = true, EmitDefaultValue = true)]
        public bool Valid { get; set; }

        /// <summary>
        /// Gets or Sets Query
        /// </summary>
        [DataMember(Name = "query", IsRequired = true, EmitDefaultValue = true)]
        public DNSLookupOptions Query { get; set; }

        /// <summary>
        /// Gets or Sets Records
        /// </summary>
        [DataMember(Name = "records", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupResult> Records { get; set; }

        /// <summary>
        /// Gets or Sets WellKnownQuery
        /// </summary>
        [DataMember(Name = "wellKnownQuery", IsRequired = true, EmitDefaultValue = true)]
        public string WellKnownQuery { get; set; }

        /// <summary>
        /// Gets or Sets WellKnownPresent
        /// </summary>
        [DataMember(Name = "wellKnownPresent", IsRequired = true, EmitDefaultValue = true)]
        public bool WellKnownPresent { get; set; }

        /// <summary>
        /// Gets or Sets WellKnownValue
        /// </summary>
        [DataMember(Name = "wellKnownValue", IsRequired = true, EmitDefaultValue = true)]
        public string WellKnownValue { get; set; }

        /// <summary>
        /// Gets or Sets Errors
        /// </summary>
        [DataMember(Name = "errors", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Errors { get; set; }

        /// <summary>
        /// Gets or Sets Warnings
        /// </summary>
        [DataMember(Name = "warnings", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Warnings { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupMtaStsDomainResults {\n");
            sb.Append("  Valid: ").Append(Valid).Append("\n");
            sb.Append("  Query: ").Append(Query).Append("\n");
            sb.Append("  Records: ").Append(Records).Append("\n");
            sb.Append("  WellKnownQuery: ").Append(WellKnownQuery).Append("\n");
            sb.Append("  WellKnownPresent: ").Append(WellKnownPresent).Append("\n");
            sb.Append("  WellKnownValue: ").Append(WellKnownValue).Append("\n");
            sb.Append("  Errors: ").Append(Errors).Append("\n");
            sb.Append("  Warnings: ").Append(Warnings).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupMtaStsDomainResults);
        }

        /// <summary>
        /// Returns true if LookupMtaStsDomainResults instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupMtaStsDomainResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupMtaStsDomainResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Valid == input.Valid ||
                    this.Valid.Equals(input.Valid)
                ) && 
                (
                    this.Query == input.Query ||
                    (this.Query != null &&
                    this.Query.Equals(input.Query))
                ) && 
                (
                    this.Records == input.Records ||
                    this.Records != null &&
                    input.Records != null &&
                    this.Records.SequenceEqual(input.Records)
                ) && 
                (
                    this.WellKnownQuery == input.WellKnownQuery ||
                    (this.WellKnownQuery != null &&
                    this.WellKnownQuery.Equals(input.WellKnownQuery))
                ) && 
                (
                    this.WellKnownPresent == input.WellKnownPresent ||
                    this.WellKnownPresent.Equals(input.WellKnownPresent)
                ) && 
                (
                    this.WellKnownValue == input.WellKnownValue ||
                    (this.WellKnownValue != null &&
                    this.WellKnownValue.Equals(input.WellKnownValue))
                ) && 
                (
                    this.Errors == input.Errors ||
                    this.Errors != null &&
                    input.Errors != null &&
                    this.Errors.SequenceEqual(input.Errors)
                ) && 
                (
                    this.Warnings == input.Warnings ||
                    this.Warnings != null &&
                    input.Warnings != null &&
                    this.Warnings.SequenceEqual(input.Warnings)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Valid.GetHashCode();
                if (this.Query != null)
                {
                    hashCode = (hashCode * 59) + this.Query.GetHashCode();
                }
                if (this.Records != null)
                {
                    hashCode = (hashCode * 59) + this.Records.GetHashCode();
                }
                if (this.WellKnownQuery != null)
                {
                    hashCode = (hashCode * 59) + this.WellKnownQuery.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.WellKnownPresent.GetHashCode();
                if (this.WellKnownValue != null)
                {
                    hashCode = (hashCode * 59) + this.WellKnownValue.GetHashCode();
                }
                if (this.Errors != null)
                {
                    hashCode = (hashCode * 59) + this.Errors.GetHashCode();
                }
                if (this.Warnings != null)
                {
                    hashCode = (hashCode * 59) + this.Warnings.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupMtaStsDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupMtaStsDomainOptions
    /// </summary>
    [DataContract(Name = "LookupMtaStsDomainOptions")]
    public partial class LookupMtaStsDomainOptions : IEquatable<LookupMtaStsDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupMtaStsDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupMtaStsDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupMtaStsDomainOptions" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        public LookupMtaStsDomainOptions(string host = default(string))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for LookupMtaStsDomainOptions and cannot be null");
            }
            this.Host = host;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupMtaStsDomainOptions {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupMtaStsDomainOptions);
        }

        /// <summary>
        /// Returns true if LookupMtaStsDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupMtaStsDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupMtaStsDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupDmarcDomainResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupDmarcDomainResults
    /// </summary>
    [DataContract(Name = "LookupDmarcDomainResults")]
    public partial class LookupDmarcDomainResults : IEquatable<LookupDmarcDomainResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupDmarcDomainResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupDmarcDomainResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupDmarcDomainResults" /> class.
        /// </summary>
        /// <param name="valid">valid (required).</param>
        /// <param name="query">query (required).</param>
        /// <param name="records">records (required).</param>
        /// <param name="errors">errors (required).</param>
        /// <param name="warnings">warnings (required).</param>
        public LookupDmarcDomainResults(bool valid = default(bool), DNSLookupOptions query = default(DNSLookupOptions), List<DNSLookupResult> records = default(List<DNSLookupResult>), List<string> errors = default(List<string>), List<string> warnings = default(List<string>))
        {
            this.Valid = valid;
            // to ensure "query" is required (not null)
            if (query == null)
            {
                throw new ArgumentNullException("query is a required property for LookupDmarcDomainResults and cannot be null");
            }
            this.Query = query;
            // to ensure "records" is required (not null)
            if (records == null)
            {
                throw new ArgumentNullException("records is a required property for LookupDmarcDomainResults and cannot be null");
            }
            this.Records = records;
            // to ensure "errors" is required (not null)
            if (errors == null)
            {
                throw new ArgumentNullException("errors is a required property for LookupDmarcDomainResults and cannot be null");
            }
            this.Errors = errors;
            // to ensure "warnings" is required (not null)
            if (warnings == null)
            {
                throw new ArgumentNullException("warnings is a required property for LookupDmarcDomainResults and cannot be null");
            }
            this.Warnings = warnings;
        }

        /// <summary>
        /// Gets or Sets Valid
        /// </summary>
        [DataMember(Name = "valid", IsRequired = true, EmitDefaultValue = true)]
        public bool Valid { get; set; }

        /// <summary>
        /// Gets or Sets Query
        /// </summary>
        [DataMember(Name = "query", IsRequired = true, EmitDefaultValue = true)]
        public DNSLookupOptions Query { get; set; }

        /// <summary>
        /// Gets or Sets Records
        /// </summary>
        [DataMember(Name = "records", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupResult> Records { get; set; }

        /// <summary>
        /// Gets or Sets Errors
        /// </summary>
        [DataMember(Name = "errors", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Errors { get; set; }

        /// <summary>
        /// Gets or Sets Warnings
        /// </summary>
        [DataMember(Name = "warnings", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Warnings { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupDmarcDomainResults {\n");
            sb.Append("  Valid: ").Append(Valid).Append("\n");
            sb.Append("  Query: ").Append(Query).Append("\n");
            sb.Append("  Records: ").Append(Records).Append("\n");
            sb.Append("  Errors: ").Append(Errors).Append("\n");
            sb.Append("  Warnings: ").Append(Warnings).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupDmarcDomainResults);
        }

        /// <summary>
        /// Returns true if LookupDmarcDomainResults instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupDmarcDomainResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupDmarcDomainResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Valid == input.Valid ||
                    this.Valid.Equals(input.Valid)
                ) && 
                (
                    this.Query == input.Query ||
                    (this.Query != null &&
                    this.Query.Equals(input.Query))
                ) && 
                (
                    this.Records == input.Records ||
                    this.Records != null &&
                    input.Records != null &&
                    this.Records.SequenceEqual(input.Records)
                ) && 
                (
                    this.Errors == input.Errors ||
                    this.Errors != null &&
                    input.Errors != null &&
                    this.Errors.SequenceEqual(input.Errors)
                ) && 
                (
                    this.Warnings == input.Warnings ||
                    this.Warnings != null &&
                    input.Warnings != null &&
                    this.Warnings.SequenceEqual(input.Warnings)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Valid.GetHashCode();
                if (this.Query != null)
                {
                    hashCode = (hashCode * 59) + this.Query.GetHashCode();
                }
                if (this.Records != null)
                {
                    hashCode = (hashCode * 59) + this.Records.GetHashCode();
                }
                if (this.Errors != null)
                {
                    hashCode = (hashCode * 59) + this.Errors.GetHashCode();
                }
                if (this.Warnings != null)
                {
                    hashCode = (hashCode * 59) + this.Warnings.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupDmarcDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupDmarcDomainOptions
    /// </summary>
    [DataContract(Name = "LookupDmarcDomainOptions")]
    public partial class LookupDmarcDomainOptions : IEquatable<LookupDmarcDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupDmarcDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupDmarcDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupDmarcDomainOptions" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        public LookupDmarcDomainOptions(string host = default(string))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for LookupDmarcDomainOptions and cannot be null");
            }
            this.Host = host;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupDmarcDomainOptions {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupDmarcDomainOptions);
        }

        /// <summary>
        /// Returns true if LookupDmarcDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupDmarcDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupDmarcDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupBimiDomainResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupBimiDomainResults
    /// </summary>
    [DataContract(Name = "LookupBimiDomainResults")]
    public partial class LookupBimiDomainResults : IEquatable<LookupBimiDomainResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupBimiDomainResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupBimiDomainResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupBimiDomainResults" /> class.
        /// </summary>
        /// <param name="valid">valid (required).</param>
        /// <param name="query">query (required).</param>
        /// <param name="records">records (required).</param>
        /// <param name="errors">errors (required).</param>
        /// <param name="warnings">warnings (required).</param>
        public LookupBimiDomainResults(bool valid = default(bool), DNSLookupOptions query = default(DNSLookupOptions), List<DNSLookupResult> records = default(List<DNSLookupResult>), List<string> errors = default(List<string>), List<string> warnings = default(List<string>))
        {
            this.Valid = valid;
            // to ensure "query" is required (not null)
            if (query == null)
            {
                throw new ArgumentNullException("query is a required property for LookupBimiDomainResults and cannot be null");
            }
            this.Query = query;
            // to ensure "records" is required (not null)
            if (records == null)
            {
                throw new ArgumentNullException("records is a required property for LookupBimiDomainResults and cannot be null");
            }
            this.Records = records;
            // to ensure "errors" is required (not null)
            if (errors == null)
            {
                throw new ArgumentNullException("errors is a required property for LookupBimiDomainResults and cannot be null");
            }
            this.Errors = errors;
            // to ensure "warnings" is required (not null)
            if (warnings == null)
            {
                throw new ArgumentNullException("warnings is a required property for LookupBimiDomainResults and cannot be null");
            }
            this.Warnings = warnings;
        }

        /// <summary>
        /// Gets or Sets Valid
        /// </summary>
        [DataMember(Name = "valid", IsRequired = true, EmitDefaultValue = true)]
        public bool Valid { get; set; }

        /// <summary>
        /// Gets or Sets Query
        /// </summary>
        [DataMember(Name = "query", IsRequired = true, EmitDefaultValue = true)]
        public DNSLookupOptions Query { get; set; }

        /// <summary>
        /// Gets or Sets Records
        /// </summary>
        [DataMember(Name = "records", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupResult> Records { get; set; }

        /// <summary>
        /// Gets or Sets Errors
        /// </summary>
        [DataMember(Name = "errors", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Errors { get; set; }

        /// <summary>
        /// Gets or Sets Warnings
        /// </summary>
        [DataMember(Name = "warnings", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Warnings { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupBimiDomainResults {\n");
            sb.Append("  Valid: ").Append(Valid).Append("\n");
            sb.Append("  Query: ").Append(Query).Append("\n");
            sb.Append("  Records: ").Append(Records).Append("\n");
            sb.Append("  Errors: ").Append(Errors).Append("\n");
            sb.Append("  Warnings: ").Append(Warnings).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupBimiDomainResults);
        }

        /// <summary>
        /// Returns true if LookupBimiDomainResults instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupBimiDomainResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupBimiDomainResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Valid == input.Valid ||
                    this.Valid.Equals(input.Valid)
                ) && 
                (
                    this.Query == input.Query ||
                    (this.Query != null &&
                    this.Query.Equals(input.Query))
                ) && 
                (
                    this.Records == input.Records ||
                    this.Records != null &&
                    input.Records != null &&
                    this.Records.SequenceEqual(input.Records)
                ) && 
                (
                    this.Errors == input.Errors ||
                    this.Errors != null &&
                    input.Errors != null &&
                    this.Errors.SequenceEqual(input.Errors)
                ) && 
                (
                    this.Warnings == input.Warnings ||
                    this.Warnings != null &&
                    input.Warnings != null &&
                    this.Warnings.SequenceEqual(input.Warnings)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Valid.GetHashCode();
                if (this.Query != null)
                {
                    hashCode = (hashCode * 59) + this.Query.GetHashCode();
                }
                if (this.Records != null)
                {
                    hashCode = (hashCode * 59) + this.Records.GetHashCode();
                }
                if (this.Errors != null)
                {
                    hashCode = (hashCode * 59) + this.Errors.GetHashCode();
                }
                if (this.Warnings != null)
                {
                    hashCode = (hashCode * 59) + this.Warnings.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LookupBimiDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LookupBimiDomainOptions
    /// </summary>
    [DataContract(Name = "LookupBimiDomainOptions")]
    public partial class LookupBimiDomainOptions : IEquatable<LookupBimiDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupBimiDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LookupBimiDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LookupBimiDomainOptions" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        public LookupBimiDomainOptions(string host = default(string))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for LookupBimiDomainOptions and cannot be null");
            }
            this.Host = host;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LookupBimiDomainOptions {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LookupBimiDomainOptions);
        }

        /// <summary>
        /// Returns true if LookupBimiDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of LookupBimiDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LookupBimiDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ListUnsubscribeRecipientProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// List unsubscribe recipient
    /// </summary>
    [DataContract(Name = "ListUnsubscribeRecipientProjection")]
    public partial class ListUnsubscribeRecipientProjection : IEquatable<ListUnsubscribeRecipientProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ListUnsubscribeRecipientProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ListUnsubscribeRecipientProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ListUnsubscribeRecipientProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="domainId">domainId.</param>
        /// <param name="id">id (required).</param>
        public ListUnsubscribeRecipientProjection(DateTime createdAt = default(DateTime), string emailAddress = default(string), Guid? domainId = default(Guid?), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for ListUnsubscribeRecipientProjection and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.Id = id;
            this.DomainId = domainId;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets DomainId
        /// </summary>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ListUnsubscribeRecipientProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ListUnsubscribeRecipientProjection);
        }

        /// <summary>
        /// Returns true if ListUnsubscribeRecipientProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ListUnsubscribeRecipientProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ListUnsubscribeRecipientProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/LinkIssue.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// LinkIssue
    /// </summary>
    [DataContract(Name = "LinkIssue")]
    public partial class LinkIssue : IEquatable<LinkIssue>, IValidatableObject
    {
        /// <summary>
        /// Defines Severity
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SeverityEnum
        {
            /// <summary>
            /// Enum Warning for value: Warning
            /// </summary>
            [EnumMember(Value = "Warning")]
            Warning = 1,

            /// <summary>
            /// Enum Error for value: Error
            /// </summary>
            [EnumMember(Value = "Error")]
            Error = 2

        }


        /// <summary>
        /// Gets or Sets Severity
        /// </summary>
        [DataMember(Name = "severity", IsRequired = true, EmitDefaultValue = true)]
        public SeverityEnum Severity { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="LinkIssue" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected LinkIssue() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="LinkIssue" /> class.
        /// </summary>
        /// <param name="url">url (required).</param>
        /// <param name="responseStatus">responseStatus.</param>
        /// <param name="severity">severity (required).</param>
        /// <param name="message">message (required).</param>
        public LinkIssue(string url = default(string), int responseStatus = default(int), SeverityEnum severity = default(SeverityEnum), string message = default(string))
        {
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for LinkIssue and cannot be null");
            }
            this.Url = url;
            this.Severity = severity;
            // to ensure "message" is required (not null)
            if (message == null)
            {
                throw new ArgumentNullException("message is a required property for LinkIssue and cannot be null");
            }
            this.Message = message;
            this.ResponseStatus = responseStatus;
        }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets ResponseStatus
        /// </summary>
        [DataMember(Name = "responseStatus", EmitDefaultValue = false)]
        public int ResponseStatus { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", IsRequired = true, EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class LinkIssue {\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  ResponseStatus: ").Append(ResponseStatus).Append("\n");
            sb.Append("  Severity: ").Append(Severity).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as LinkIssue);
        }

        /// <summary>
        /// Returns true if LinkIssue instances are equal
        /// </summary>
        /// <param name="input">Instance of LinkIssue to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(LinkIssue input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.ResponseStatus == input.ResponseStatus ||
                    this.ResponseStatus.Equals(input.ResponseStatus)
                ) && 
                (
                    this.Severity == input.Severity ||
                    this.Severity.Equals(input.Severity)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ResponseStatus.GetHashCode();
                hashCode = (hashCode * 59) + this.Severity.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/JSONSchemaDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// JSONSchema for payload
    /// </summary>
    [DataContract(Name = "JSONSchemaDto")]
    public partial class JSONSchemaDto : IEquatable<JSONSchemaDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="JSONSchemaDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected JSONSchemaDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="JSONSchemaDto" /> class.
        /// </summary>
        /// <param name="value">value (required).</param>
        public JSONSchemaDto(string value = default(string))
        {
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for JSONSchemaDto and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class JSONSchemaDto {\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as JSONSchemaDto);
        }

        /// <summary>
        /// Returns true if JSONSchemaDto instances are equal
        /// </summary>
        /// <param name="input">Instance of JSONSchemaDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(JSONSchemaDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxRulesetTestResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of test of inbox ruleset
    /// </summary>
    [DataContract(Name = "InboxRulesetTestResult")]
    public partial class InboxRulesetTestResult : IEquatable<InboxRulesetTestResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetTestResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxRulesetTestResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetTestResult" /> class.
        /// </summary>
        /// <param name="rulesetMatches">Map of inbox ruleset ID to boolean of if target matches (required).</param>
        /// <param name="matches">matches (required).</param>
        public InboxRulesetTestResult(Dictionary<string, bool> rulesetMatches = default(Dictionary<string, bool>), bool matches = default(bool))
        {
            // to ensure "rulesetMatches" is required (not null)
            if (rulesetMatches == null)
            {
                throw new ArgumentNullException("rulesetMatches is a required property for InboxRulesetTestResult and cannot be null");
            }
            this.RulesetMatches = rulesetMatches;
            this.Matches = matches;
        }

        /// <summary>
        /// Map of inbox ruleset ID to boolean of if target matches
        /// </summary>
        /// <value>Map of inbox ruleset ID to boolean of if target matches</value>
        [DataMember(Name = "rulesetMatches", IsRequired = true, EmitDefaultValue = true)]
        public Dictionary<string, bool> RulesetMatches { get; set; }

        /// <summary>
        /// Gets or Sets Matches
        /// </summary>
        [DataMember(Name = "matches", IsRequired = true, EmitDefaultValue = true)]
        public bool Matches { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxRulesetTestResult {\n");
            sb.Append("  RulesetMatches: ").Append(RulesetMatches).Append("\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxRulesetTestResult);
        }

        /// <summary>
        /// Returns true if InboxRulesetTestResult instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxRulesetTestResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxRulesetTestResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RulesetMatches == input.RulesetMatches ||
                    this.RulesetMatches != null &&
                    input.RulesetMatches != null &&
                    this.RulesetMatches.SequenceEqual(input.RulesetMatches)
                ) && 
                (
                    this.Matches == input.Matches ||
                    this.Matches.Equals(input.Matches)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RulesetMatches != null)
                {
                    hashCode = (hashCode * 59) + this.RulesetMatches.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxRulesetTestOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Test options for inbox ruleset
    /// </summary>
    [DataContract(Name = "InboxRulesetTestOptions")]
    public partial class InboxRulesetTestOptions : IEquatable<InboxRulesetTestOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetTestOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxRulesetTestOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetTestOptions" /> class.
        /// </summary>
        /// <param name="testTarget">testTarget (required).</param>
        public InboxRulesetTestOptions(string testTarget = default(string))
        {
            // to ensure "testTarget" is required (not null)
            if (testTarget == null)
            {
                throw new ArgumentNullException("testTarget is a required property for InboxRulesetTestOptions and cannot be null");
            }
            this.TestTarget = testTarget;
        }

        /// <summary>
        /// Gets or Sets TestTarget
        /// </summary>
        [DataMember(Name = "testTarget", IsRequired = true, EmitDefaultValue = true)]
        public string TestTarget { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxRulesetTestOptions {\n");
            sb.Append("  TestTarget: ").Append(TestTarget).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxRulesetTestOptions);
        }

        /// <summary>
        /// Returns true if InboxRulesetTestOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxRulesetTestOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxRulesetTestOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.TestTarget == input.TestTarget ||
                    (this.TestTarget != null &&
                    this.TestTarget.Equals(input.TestTarget))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.TestTarget != null)
                {
                    hashCode = (hashCode * 59) + this.TestTarget.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxRulesetDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Rules for inbox
    /// </summary>
    [DataContract(Name = "InboxRulesetDto")]
    public partial class InboxRulesetDto : IEquatable<InboxRulesetDto>, IValidatableObject
    {
        /// <summary>
        /// Defines Scope
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ScopeEnum
        {
            /// <summary>
            /// Enum RECEIVINGEMAILS for value: RECEIVING_EMAILS
            /// </summary>
            [EnumMember(Value = "RECEIVING_EMAILS")]
            RECEIVINGEMAILS = 1,

            /// <summary>
            /// Enum SENDINGEMAILS for value: SENDING_EMAILS
            /// </summary>
            [EnumMember(Value = "SENDING_EMAILS")]
            SENDINGEMAILS = 2

        }


        /// <summary>
        /// Gets or Sets Scope
        /// </summary>
        [DataMember(Name = "scope", IsRequired = true, EmitDefaultValue = true)]
        public ScopeEnum Scope { get; set; }
        /// <summary>
        /// Defines Action
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ActionEnum
        {
            /// <summary>
            /// Enum BLOCK for value: BLOCK
            /// </summary>
            [EnumMember(Value = "BLOCK")]
            BLOCK = 1,

            /// <summary>
            /// Enum ALLOW for value: ALLOW
            /// </summary>
            [EnumMember(Value = "ALLOW")]
            ALLOW = 2,

            /// <summary>
            /// Enum FILTERREMOVE for value: FILTER_REMOVE
            /// </summary>
            [EnumMember(Value = "FILTER_REMOVE")]
            FILTERREMOVE = 3

        }


        /// <summary>
        /// Gets or Sets Action
        /// </summary>
        [DataMember(Name = "action", IsRequired = true, EmitDefaultValue = true)]
        public ActionEnum Action { get; set; }
        /// <summary>
        /// Defines Handler
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum HandlerEnum
        {
            /// <summary>
            /// Enum EXCEPTION for value: EXCEPTION
            /// </summary>
            [EnumMember(Value = "EXCEPTION")]
            EXCEPTION = 1

        }


        /// <summary>
        /// Gets or Sets Handler
        /// </summary>
        [DataMember(Name = "handler", IsRequired = true, EmitDefaultValue = true)]
        public HandlerEnum Handler { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxRulesetDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="scope">scope (required).</param>
        /// <param name="action">action (required).</param>
        /// <param name="target">target (required).</param>
        /// <param name="handler">handler (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public InboxRulesetDto(Guid id = default(Guid), Guid? inboxId = default(Guid?), ScopeEnum scope = default(ScopeEnum), ActionEnum action = default(ActionEnum), string target = default(string), HandlerEnum handler = default(HandlerEnum), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.Scope = scope;
            this.Action = action;
            // to ensure "target" is required (not null)
            if (target == null)
            {
                throw new ArgumentNullException("target is a required property for InboxRulesetDto and cannot be null");
            }
            this.Target = target;
            this.Handler = handler;
            this.CreatedAt = createdAt;
            this.InboxId = inboxId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Target
        /// </summary>
        [DataMember(Name = "target", IsRequired = true, EmitDefaultValue = true)]
        public string Target { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxRulesetDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Scope: ").Append(Scope).Append("\n");
            sb.Append("  Action: ").Append(Action).Append("\n");
            sb.Append("  Target: ").Append(Target).Append("\n");
            sb.Append("  Handler: ").Append(Handler).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxRulesetDto);
        }

        /// <summary>
        /// Returns true if InboxRulesetDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxRulesetDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxRulesetDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Scope == input.Scope ||
                    this.Scope.Equals(input.Scope)
                ) && 
                (
                    this.Action == input.Action ||
                    this.Action.Equals(input.Action)
                ) && 
                (
                    this.Target == input.Target ||
                    (this.Target != null &&
                    this.Target.Equals(input.Target))
                ) && 
                (
                    this.Handler == input.Handler ||
                    this.Handler.Equals(input.Handler)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Scope.GetHashCode();
                hashCode = (hashCode * 59) + this.Action.GetHashCode();
                if (this.Target != null)
                {
                    hashCode = (hashCode * 59) + this.Target.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Handler.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxReplierEventProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox replier event
    /// </summary>
    [DataContract(Name = "InboxReplierEventProjection")]
    public partial class InboxReplierEventProjection : IEquatable<InboxReplierEventProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 1,

            /// <summary>
            /// Enum FAILURE for value: FAILURE
            /// </summary>
            [EnumMember(Value = "FAILURE")]
            FAILURE = 2

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", EmitDefaultValue = true)]
        public StatusEnum? Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierEventProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxReplierEventProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierEventProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="replierId">replierId.</param>
        /// <param name="recipients">recipients.</param>
        /// <param name="emailId">emailId.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="userId">userId.</param>
        /// <param name="sentId">sentId.</param>
        /// <param name="message">message.</param>
        /// <param name="id">id.</param>
        /// <param name="status">status.</param>
        public InboxReplierEventProjection(DateTime createdAt = default(DateTime), Guid? replierId = default(Guid?), List<string> recipients = default(List<string>), Guid? emailId = default(Guid?), Guid? inboxId = default(Guid?), Guid? userId = default(Guid?), Guid? sentId = default(Guid?), string message = default(string), Guid? id = default(Guid?), StatusEnum? status = default(StatusEnum?))
        {
            this.CreatedAt = createdAt;
            this.ReplierId = replierId;
            this.Recipients = recipients;
            this.EmailId = emailId;
            this.InboxId = inboxId;
            this.UserId = userId;
            this.SentId = sentId;
            this.Message = message;
            this.Id = id;
            this.Status = status;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets ReplierId
        /// </summary>
        [DataMember(Name = "replierId", EmitDefaultValue = true)]
        public Guid? ReplierId { get; set; }

        /// <summary>
        /// Gets or Sets Recipients
        /// </summary>
        [DataMember(Name = "recipients", EmitDefaultValue = true)]
        public List<string> Recipients { get; set; }

        /// <summary>
        /// Gets or Sets EmailId
        /// </summary>
        [DataMember(Name = "emailId", EmitDefaultValue = true)]
        public Guid? EmailId { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets SentId
        /// </summary>
        [DataMember(Name = "sentId", EmitDefaultValue = true)]
        public Guid? SentId { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = true)]
        public Guid? Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxReplierEventProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  ReplierId: ").Append(ReplierId).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SentId: ").Append(SentId).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxReplierEventProjection);
        }

        /// <summary>
        /// Returns true if InboxReplierEventProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxReplierEventProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxReplierEventProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.ReplierId == input.ReplierId ||
                    (this.ReplierId != null &&
                    this.ReplierId.Equals(input.ReplierId))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    this.Recipients != null &&
                    input.Recipients != null &&
                    this.Recipients.SequenceEqual(input.Recipients)
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SentId == input.SentId ||
                    (this.SentId != null &&
                    this.SentId.Equals(input.SentId))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.ReplierId != null)
                {
                    hashCode = (hashCode * 59) + this.ReplierId.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.SentId != null)
                {
                    hashCode = (hashCode * 59) + this.SentId.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxReplierDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox replier. Will automatically reply to inbound emails that match given field for an inbox.
    /// </summary>
    [DataContract(Name = "InboxReplierDto")]
    public partial class InboxReplierDto : IEquatable<InboxReplierDto>, IValidatableObject
    {
        /// <summary>
        /// Defines Field
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum RECIPIENTS for value: RECIPIENTS
            /// </summary>
            [EnumMember(Value = "RECIPIENTS")]
            RECIPIENTS = 1,

            /// <summary>
            /// Enum SENDER for value: SENDER
            /// </summary>
            [EnumMember(Value = "SENDER")]
            SENDER = 2,

            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 3,

            /// <summary>
            /// Enum ATTACHMENTS for value: ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "ATTACHMENTS")]
            ATTACHMENTS = 4

        }


        /// <summary>
        /// Gets or Sets Field
        /// </summary>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxReplierDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="name">name.</param>
        /// <param name="field">field (required).</param>
        /// <param name="match">match (required).</param>
        /// <param name="replyTo">replyTo.</param>
        /// <param name="subject">subject.</param>
        /// <param name="from">from.</param>
        /// <param name="charset">charset.</param>
        /// <param name="isHTML">isHTML (required).</param>
        /// <param name="templateId">templateId.</param>
        /// <param name="templateVariables">templateVariables.</param>
        /// <param name="ignoreReplyTo">ignoreReplyTo (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public InboxReplierDto(Guid id = default(Guid), Guid inboxId = default(Guid), string name = default(string), FieldEnum field = default(FieldEnum), string match = default(string), string replyTo = default(string), string subject = default(string), string from = default(string), string charset = default(string), bool isHTML = default(bool), Guid? templateId = default(Guid?), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>), bool ignoreReplyTo = default(bool), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.InboxId = inboxId;
            this.Field = field;
            // to ensure "match" is required (not null)
            if (match == null)
            {
                throw new ArgumentNullException("match is a required property for InboxReplierDto and cannot be null");
            }
            this.Match = match;
            this.IsHTML = isHTML;
            this.IgnoreReplyTo = ignoreReplyTo;
            this.CreatedAt = createdAt;
            this.Name = name;
            this.ReplyTo = replyTo;
            this.Subject = subject;
            this.From = from;
            this.Charset = charset;
            this.TemplateId = templateId;
            this.TemplateVariables = templateVariables;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Match
        /// </summary>
        [DataMember(Name = "match", IsRequired = true, EmitDefaultValue = true)]
        public string Match { get; set; }

        /// <summary>
        /// Gets or Sets ReplyTo
        /// </summary>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Gets or Sets Charset
        /// </summary>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Gets or Sets IsHTML
        /// </summary>
        [DataMember(Name = "isHTML", IsRequired = true, EmitDefaultValue = true)]
        public bool IsHTML { get; set; }

        /// <summary>
        /// Gets or Sets TemplateId
        /// </summary>
        [DataMember(Name = "templateId", EmitDefaultValue = true)]
        public Guid? TemplateId { get; set; }

        /// <summary>
        /// Gets or Sets TemplateVariables
        /// </summary>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Gets or Sets IgnoreReplyTo
        /// </summary>
        [DataMember(Name = "ignoreReplyTo", IsRequired = true, EmitDefaultValue = true)]
        public bool IgnoreReplyTo { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxReplierDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Match: ").Append(Match).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  TemplateId: ").Append(TemplateId).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("  IgnoreReplyTo: ").Append(IgnoreReplyTo).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxReplierDto);
        }

        /// <summary>
        /// Returns true if InboxReplierDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxReplierDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxReplierDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Match == input.Match ||
                    (this.Match != null &&
                    this.Match.Equals(input.Match))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    this.IsHTML.Equals(input.IsHTML)
                ) && 
                (
                    this.TemplateId == input.TemplateId ||
                    (this.TemplateId != null &&
                    this.TemplateId.Equals(input.TemplateId))
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                ) && 
                (
                    this.IgnoreReplyTo == input.IgnoreReplyTo ||
                    this.IgnoreReplyTo.Equals(input.IgnoreReplyTo)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                if (this.Match != null)
                {
                    hashCode = (hashCode * 59) + this.Match.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                if (this.TemplateId != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateId.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IgnoreReplyTo.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox data preview element.
    /// </summary>
    [DataContract(Name = "InboxPreview")]
    public partial class InboxPreview : IEquatable<InboxPreview>, IValidatableObject
    {
        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPINBOX for value: SMTP_INBOX
            /// </summary>
            [EnumMember(Value = "SMTP_INBOX")]
            SMTPINBOX = 2

        }


        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [DataMember(Name = "inboxType", EmitDefaultValue = true)]
        public InboxTypeEnum? InboxType { get; set; }
        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FunctionsAsEnum
        {
            /// <summary>
            /// Enum ALIAS for value: ALIAS
            /// </summary>
            [EnumMember(Value = "ALIAS")]
            ALIAS = 1,

            /// <summary>
            /// Enum THREAD for value: THREAD
            /// </summary>
            [EnumMember(Value = "THREAD")]
            THREAD = 2,

            /// <summary>
            /// Enum CATCHALL for value: CATCH_ALL
            /// </summary>
            [EnumMember(Value = "CATCH_ALL")]
            CATCHALL = 3,

            /// <summary>
            /// Enum CONNECTOR for value: CONNECTOR
            /// </summary>
            [EnumMember(Value = "CONNECTOR")]
            CONNECTOR = 4

        }


        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [DataMember(Name = "functionsAs", EmitDefaultValue = true)]
        public FunctionsAsEnum? FunctionsAs { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxPreview" /> class.
        /// </summary>
        /// <param name="id">ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically. (required).</param>
        /// <param name="domainId">ID of custom domain used by the inbox if any.</param>
        /// <param name="emailAddress">The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID..</param>
        /// <param name="createdAt">When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;. (required).</param>
        /// <param name="favourite">Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering (required).</param>
        /// <param name="name">Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search.</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI..</param>
        /// <param name="teamAccess">Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/ (required).</param>
        /// <param name="inboxType">Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send)..</param>
        /// <param name="virtualInbox">Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions. (required).</param>
        /// <param name="expiresAt">Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email..</param>
        /// <param name="functionsAs">Inbox function if used as a primitive for another system..</param>
        public InboxPreview(Guid id = default(Guid), Guid? domainId = default(Guid?), string emailAddress = default(string), DateTime createdAt = default(DateTime), bool favourite = default(bool), string name = default(string), List<string> tags = default(List<string>), bool teamAccess = default(bool), InboxTypeEnum? inboxType = default(InboxTypeEnum?), bool virtualInbox = default(bool), string expiresAt = default(string), FunctionsAsEnum? functionsAs = default(FunctionsAsEnum?))
        {
            this.Id = id;
            this.CreatedAt = createdAt;
            this.Favourite = favourite;
            this.TeamAccess = teamAccess;
            this.VirtualInbox = virtualInbox;
            this.DomainId = domainId;
            this.EmailAddress = emailAddress;
            this.Name = name;
            this.Tags = tags;
            this.InboxType = inboxType;
            this.ExpiresAt = expiresAt;
            this.FunctionsAs = functionsAs;
        }

        /// <summary>
        /// ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.
        /// </summary>
        /// <value>ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// ID of custom domain used by the inbox if any
        /// </summary>
        /// <value>ID of custom domain used by the inbox if any</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.
        /// </summary>
        /// <value>The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.</value>
        [DataMember(Name = "emailAddress", EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.
        /// </summary>
        /// <value>When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "favourite", IsRequired = true, EmitDefaultValue = true)]
        public bool Favourite { get; set; }

        /// <summary>
        /// Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search
        /// </summary>
        /// <value>Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.
        /// </summary>
        /// <value>Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/
        /// </summary>
        /// <value>Does inbox permit team access for organization team members. If so team users can use inbox and emails associated with it. See the team access guide at https://www.mailslurp.com/guides/team-email-account-sharing/</value>
        [DataMember(Name = "teamAccess", IsRequired = true, EmitDefaultValue = true)]
        public bool TeamAccess { get; set; }

        /// <summary>
        /// Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.
        /// </summary>
        /// <value>Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.</value>
        [DataMember(Name = "virtualInbox", IsRequired = true, EmitDefaultValue = true)]
        public bool VirtualInbox { get; set; }

        /// <summary>
        /// Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.
        /// </summary>
        /// <value>Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.</value>
        [DataMember(Name = "expiresAt", EmitDefaultValue = true)]
        public string ExpiresAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxPreview {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  TeamAccess: ").Append(TeamAccess).Append("\n");
            sb.Append("  InboxType: ").Append(InboxType).Append("\n");
            sb.Append("  VirtualInbox: ").Append(VirtualInbox).Append("\n");
            sb.Append("  ExpiresAt: ").Append(ExpiresAt).Append("\n");
            sb.Append("  FunctionsAs: ").Append(FunctionsAs).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxPreview);
        }

        /// <summary>
        /// Returns true if InboxPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    this.Favourite.Equals(input.Favourite)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.TeamAccess == input.TeamAccess ||
                    this.TeamAccess.Equals(input.TeamAccess)
                ) && 
                (
                    this.InboxType == input.InboxType ||
                    this.InboxType.Equals(input.InboxType)
                ) && 
                (
                    this.VirtualInbox == input.VirtualInbox ||
                    this.VirtualInbox.Equals(input.VirtualInbox)
                ) && 
                (
                    this.ExpiresAt == input.ExpiresAt ||
                    (this.ExpiresAt != null &&
                    this.ExpiresAt.Equals(input.ExpiresAt))
                ) && 
                (
                    this.FunctionsAs == input.FunctionsAs ||
                    this.FunctionsAs.Equals(input.FunctionsAs)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TeamAccess.GetHashCode();
                hashCode = (hashCode * 59) + this.InboxType.GetHashCode();
                hashCode = (hashCode * 59) + this.VirtualInbox.GetHashCode();
                if (this.ExpiresAt != null)
                {
                    hashCode = (hashCode * 59) + this.ExpiresAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.FunctionsAs.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxIdsResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// List of inbox IDs and email addresses
    /// </summary>
    [DataContract(Name = "InboxIdsResult")]
    public partial class InboxIdsResult : IEquatable<InboxIdsResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxIdsResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxIdsResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxIdsResult" /> class.
        /// </summary>
        /// <param name="inboxIds">inboxIds (required).</param>
        public InboxIdsResult(List<InboxIdItem> inboxIds = default(List<InboxIdItem>))
        {
            // to ensure "inboxIds" is required (not null)
            if (inboxIds == null)
            {
                throw new ArgumentNullException("inboxIds is a required property for InboxIdsResult and cannot be null");
            }
            this.InboxIds = inboxIds;
        }

        /// <summary>
        /// Gets or Sets InboxIds
        /// </summary>
        [DataMember(Name = "inboxIds", IsRequired = true, EmitDefaultValue = true)]
        public List<InboxIdItem> InboxIds { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxIdsResult {\n");
            sb.Append("  InboxIds: ").Append(InboxIds).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxIdsResult);
        }

        /// <summary>
        /// Returns true if InboxIdsResult instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxIdsResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxIdsResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxIds == input.InboxIds ||
                    this.InboxIds != null &&
                    input.InboxIds != null &&
                    this.InboxIds.SequenceEqual(input.InboxIds)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxIds != null)
                {
                    hashCode = (hashCode * 59) + this.InboxIds.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxIdItem.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox ID and email address pair
    /// </summary>
    [DataContract(Name = "InboxIdItem")]
    public partial class InboxIdItem : IEquatable<InboxIdItem>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxIdItem" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxIdItem() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxIdItem" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        public InboxIdItem(Guid id = default(Guid), string emailAddress = default(string))
        {
            this.Id = id;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for InboxIdItem and cannot be null");
            }
            this.EmailAddress = emailAddress;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxIdItem {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxIdItem);
        }

        /// <summary>
        /// Returns true if InboxIdItem instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxIdItem to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxIdItem input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxForwarderTestResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Results of inbox forwarder test
    /// </summary>
    [DataContract(Name = "InboxForwarderTestResult")]
    public partial class InboxForwarderTestResult : IEquatable<InboxForwarderTestResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderTestResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxForwarderTestResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderTestResult" /> class.
        /// </summary>
        /// <param name="matches">matches (required).</param>
        /// <param name="doesMatch">doesMatch (required).</param>
        public InboxForwarderTestResult(Dictionary<string, bool> matches = default(Dictionary<string, bool>), bool doesMatch = default(bool))
        {
            // to ensure "matches" is required (not null)
            if (matches == null)
            {
                throw new ArgumentNullException("matches is a required property for InboxForwarderTestResult and cannot be null");
            }
            this.Matches = matches;
            this.DoesMatch = doesMatch;
        }

        /// <summary>
        /// Gets or Sets Matches
        /// </summary>
        [DataMember(Name = "matches", IsRequired = true, EmitDefaultValue = true)]
        public Dictionary<string, bool> Matches { get; set; }

        /// <summary>
        /// Gets or Sets DoesMatch
        /// </summary>
        [DataMember(Name = "doesMatch", IsRequired = true, EmitDefaultValue = true)]
        public bool DoesMatch { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxForwarderTestResult {\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("  DoesMatch: ").Append(DoesMatch).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxForwarderTestResult);
        }

        /// <summary>
        /// Returns true if InboxForwarderTestResult instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxForwarderTestResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxForwarderTestResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Matches == input.Matches ||
                    this.Matches != null &&
                    input.Matches != null &&
                    this.Matches.SequenceEqual(input.Matches)
                ) && 
                (
                    this.DoesMatch == input.DoesMatch ||
                    this.DoesMatch.Equals(input.DoesMatch)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Matches != null)
                {
                    hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.DoesMatch.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxForwarderTestOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for testing an inbox forwarder against a value
    /// </summary>
    [DataContract(Name = "InboxForwarderTestOptions")]
    public partial class InboxForwarderTestOptions : IEquatable<InboxForwarderTestOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderTestOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxForwarderTestOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderTestOptions" /> class.
        /// </summary>
        /// <param name="testValue">testValue (required).</param>
        public InboxForwarderTestOptions(string testValue = default(string))
        {
            // to ensure "testValue" is required (not null)
            if (testValue == null)
            {
                throw new ArgumentNullException("testValue is a required property for InboxForwarderTestOptions and cannot be null");
            }
            this.TestValue = testValue;
        }

        /// <summary>
        /// Gets or Sets TestValue
        /// </summary>
        [DataMember(Name = "testValue", IsRequired = true, EmitDefaultValue = true)]
        public string TestValue { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxForwarderTestOptions {\n");
            sb.Append("  TestValue: ").Append(TestValue).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxForwarderTestOptions);
        }

        /// <summary>
        /// Returns true if InboxForwarderTestOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxForwarderTestOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxForwarderTestOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.TestValue == input.TestValue ||
                    (this.TestValue != null &&
                    this.TestValue.Equals(input.TestValue))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.TestValue != null)
                {
                    hashCode = (hashCode * 59) + this.TestValue.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxForwarderEventProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox forwarder event
    /// </summary>
    [DataContract(Name = "InboxForwarderEventProjection")]
    public partial class InboxForwarderEventProjection : IEquatable<InboxForwarderEventProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 1,

            /// <summary>
            /// Enum FAILURE for value: FAILURE
            /// </summary>
            [EnumMember(Value = "FAILURE")]
            FAILURE = 2

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", EmitDefaultValue = true)]
        public StatusEnum? Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderEventProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxForwarderEventProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderEventProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="emailId">emailId.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="userId">userId.</param>
        /// <param name="forwarderId">forwarderId.</param>
        /// <param name="message">message.</param>
        /// <param name="id">id.</param>
        /// <param name="status">status.</param>
        public InboxForwarderEventProjection(DateTime createdAt = default(DateTime), Guid? emailId = default(Guid?), Guid? inboxId = default(Guid?), Guid? userId = default(Guid?), Guid? forwarderId = default(Guid?), string message = default(string), Guid? id = default(Guid?), StatusEnum? status = default(StatusEnum?))
        {
            this.CreatedAt = createdAt;
            this.EmailId = emailId;
            this.InboxId = inboxId;
            this.UserId = userId;
            this.ForwarderId = forwarderId;
            this.Message = message;
            this.Id = id;
            this.Status = status;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets EmailId
        /// </summary>
        [DataMember(Name = "emailId", EmitDefaultValue = true)]
        public Guid? EmailId { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets ForwarderId
        /// </summary>
        [DataMember(Name = "forwarderId", EmitDefaultValue = true)]
        public Guid? ForwarderId { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = true)]
        public Guid? Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxForwarderEventProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  ForwarderId: ").Append(ForwarderId).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxForwarderEventProjection);
        }

        /// <summary>
        /// Returns true if InboxForwarderEventProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxForwarderEventProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxForwarderEventProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.ForwarderId == input.ForwarderId ||
                    (this.ForwarderId != null &&
                    this.ForwarderId.Equals(input.ForwarderId))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.ForwarderId != null)
                {
                    hashCode = (hashCode * 59) + this.ForwarderId.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxForwarderEventDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox forwarder event. Describes how an email was handled by an inbox forwarder.
    /// </summary>
    [DataContract(Name = "InboxForwarderEventDto")]
    public partial class InboxForwarderEventDto : IEquatable<InboxForwarderEventDto>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 1,

            /// <summary>
            /// Enum FAILURE for value: FAILURE
            /// </summary>
            [EnumMember(Value = "FAILURE")]
            FAILURE = 2

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", EmitDefaultValue = true)]
        public StatusEnum? Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderEventDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxForwarderEventDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderEventDto" /> class.
        /// </summary>
        /// <param name="id">id.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="emailId">emailId.</param>
        /// <param name="userId">userId.</param>
        /// <param name="forwarderId">forwarderId.</param>
        /// <param name="message">message.</param>
        /// <param name="status">status.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public InboxForwarderEventDto(Guid? id = default(Guid?), Guid? inboxId = default(Guid?), Guid? emailId = default(Guid?), Guid? userId = default(Guid?), Guid? forwarderId = default(Guid?), string message = default(string), StatusEnum? status = default(StatusEnum?), DateTime createdAt = default(DateTime))
        {
            this.CreatedAt = createdAt;
            this.Id = id;
            this.InboxId = inboxId;
            this.EmailId = emailId;
            this.UserId = userId;
            this.ForwarderId = forwarderId;
            this.Message = message;
            this.Status = status;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = true)]
        public Guid? Id { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets EmailId
        /// </summary>
        [DataMember(Name = "emailId", EmitDefaultValue = true)]
        public Guid? EmailId { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets ForwarderId
        /// </summary>
        [DataMember(Name = "forwarderId", EmitDefaultValue = true)]
        public Guid? ForwarderId { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxForwarderEventDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailId: ").Append(EmailId).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  ForwarderId: ").Append(ForwarderId).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxForwarderEventDto);
        }

        /// <summary>
        /// Returns true if InboxForwarderEventDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxForwarderEventDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxForwarderEventDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailId == input.EmailId ||
                    (this.EmailId != null &&
                    this.EmailId.Equals(input.EmailId))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.ForwarderId == input.ForwarderId ||
                    (this.ForwarderId != null &&
                    this.ForwarderId.Equals(input.ForwarderId))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.EmailId != null)
                {
                    hashCode = (hashCode * 59) + this.EmailId.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.ForwarderId != null)
                {
                    hashCode = (hashCode * 59) + this.ForwarderId.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxForwarderDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Inbox forwarder. Describes how an inbox will forward matching emails to designated recipients.
    /// </summary>
    [DataContract(Name = "InboxForwarderDto")]
    public partial class InboxForwarderDto : IEquatable<InboxForwarderDto>, IValidatableObject
    {
        /// <summary>
        /// Which field to match against
        /// </summary>
        /// <value>Which field to match against</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum RECIPIENTS for value: RECIPIENTS
            /// </summary>
            [EnumMember(Value = "RECIPIENTS")]
            RECIPIENTS = 1,

            /// <summary>
            /// Enum SENDER for value: SENDER
            /// </summary>
            [EnumMember(Value = "SENDER")]
            SENDER = 2,

            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 3,

            /// <summary>
            /// Enum ATTACHMENTS for value: ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "ATTACHMENTS")]
            ATTACHMENTS = 4

        }


        /// <summary>
        /// Which field to match against
        /// </summary>
        /// <value>Which field to match against</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxForwarderDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="name">Name of inbox forwarder.</param>
        /// <param name="field">Which field to match against (required).</param>
        /// <param name="match">Wild-card type pattern to apply to field (required).</param>
        /// <param name="forwardToRecipients">Who to send forwarded email to (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public InboxForwarderDto(Guid id = default(Guid), Guid inboxId = default(Guid), string name = default(string), FieldEnum field = default(FieldEnum), string match = default(string), List<string> forwardToRecipients = default(List<string>), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.InboxId = inboxId;
            this.Field = field;
            // to ensure "match" is required (not null)
            if (match == null)
            {
                throw new ArgumentNullException("match is a required property for InboxForwarderDto and cannot be null");
            }
            this.Match = match;
            // to ensure "forwardToRecipients" is required (not null)
            if (forwardToRecipients == null)
            {
                throw new ArgumentNullException("forwardToRecipients is a required property for InboxForwarderDto and cannot be null");
            }
            this.ForwardToRecipients = forwardToRecipients;
            this.CreatedAt = createdAt;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Name of inbox forwarder
        /// </summary>
        /// <value>Name of inbox forwarder</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Wild-card type pattern to apply to field
        /// </summary>
        /// <value>Wild-card type pattern to apply to field</value>
        [DataMember(Name = "match", IsRequired = true, EmitDefaultValue = true)]
        public string Match { get; set; }

        /// <summary>
        /// Who to send forwarded email to
        /// </summary>
        /// <value>Who to send forwarded email to</value>
        [DataMember(Name = "forwardToRecipients", IsRequired = true, EmitDefaultValue = true)]
        public List<string> ForwardToRecipients { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxForwarderDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Match: ").Append(Match).Append("\n");
            sb.Append("  ForwardToRecipients: ").Append(ForwardToRecipients).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxForwarderDto);
        }

        /// <summary>
        /// Returns true if InboxForwarderDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxForwarderDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxForwarderDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Match == input.Match ||
                    (this.Match != null &&
                    this.Match.Equals(input.Match))
                ) && 
                (
                    this.ForwardToRecipients == input.ForwardToRecipients ||
                    this.ForwardToRecipients != null &&
                    input.ForwardToRecipients != null &&
                    this.ForwardToRecipients.SequenceEqual(input.ForwardToRecipients)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                if (this.Match != null)
                {
                    hashCode = (hashCode * 59) + this.Match.GetHashCode();
                }
                if (this.ForwardToRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.ForwardToRecipients.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxExistsDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of email exists query
    /// </summary>
    [DataContract(Name = "InboxExistsDto")]
    public partial class InboxExistsDto : IEquatable<InboxExistsDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxExistsDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxExistsDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxExistsDto" /> class.
        /// </summary>
        /// <param name="exists">exists (required).</param>
        public InboxExistsDto(bool exists = default(bool))
        {
            this.Exists = exists;
        }

        /// <summary>
        /// Gets or Sets Exists
        /// </summary>
        [DataMember(Name = "exists", IsRequired = true, EmitDefaultValue = true)]
        public bool Exists { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxExistsDto {\n");
            sb.Append("  Exists: ").Append(Exists).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxExistsDto);
        }

        /// <summary>
        /// Returns true if InboxExistsDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxExistsDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxExistsDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Exists == input.Exists ||
                    this.Exists.Equals(input.Exists)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Exists.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Representation of a MailSlurp inbox. An inbox has an ID and a real email address. Emails can be sent to or from this email address. Inboxes are either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; mailboxes. The default, &#x60;HTTP&#x60; inboxes, use AWS SES to process emails and are best suited as test email accounts and do not support IMAP or POP3. &#x60;SMTP&#x60; inboxes use a custom mail server at &#x60;mxslurp.click&#x60; and support SMTP login, IMAP and POP3. Use the &#x60;EmailController&#x60; or the &#x60;InboxController&#x60; methods to send and receive emails and attachments. Inboxes may have a description, name, and tags for display purposes. You can also favourite an inbox for easier searching.
    /// </summary>
    [DataContract(Name = "InboxDto")]
    public partial class InboxDto : IEquatable<InboxDto>, IValidatableObject
    {
        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPINBOX for value: SMTP_INBOX
            /// </summary>
            [EnumMember(Value = "SMTP_INBOX")]
            SMTPINBOX = 2

        }


        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [DataMember(Name = "inboxType", EmitDefaultValue = true)]
        public InboxTypeEnum? InboxType { get; set; }
        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FunctionsAsEnum
        {
            /// <summary>
            /// Enum ALIAS for value: ALIAS
            /// </summary>
            [EnumMember(Value = "ALIAS")]
            ALIAS = 1,

            /// <summary>
            /// Enum THREAD for value: THREAD
            /// </summary>
            [EnumMember(Value = "THREAD")]
            THREAD = 2,

            /// <summary>
            /// Enum CATCHALL for value: CATCH_ALL
            /// </summary>
            [EnumMember(Value = "CATCH_ALL")]
            CATCHALL = 3,

            /// <summary>
            /// Enum CONNECTOR for value: CONNECTOR
            /// </summary>
            [EnumMember(Value = "CONNECTOR")]
            CONNECTOR = 4

        }


        /// <summary>
        /// Inbox function if used as a primitive for another system.
        /// </summary>
        /// <value>Inbox function if used as a primitive for another system.</value>
        [DataMember(Name = "functionsAs", EmitDefaultValue = true)]
        public FunctionsAsEnum? FunctionsAs { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxDto" /> class.
        /// </summary>
        /// <param name="id">ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically. (required).</param>
        /// <param name="userId">ID of user that inbox belongs to.</param>
        /// <param name="createdAt">When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;. (required).</param>
        /// <param name="name">Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search.</param>
        /// <param name="domainId">ID of custom domain used by the inbox if any.</param>
        /// <param name="description">Description of an inbox for labelling and searching purposes.</param>
        /// <param name="emailAddress">The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (required).</param>
        /// <param name="expiresAt">Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email..</param>
        /// <param name="favourite">Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering (required).</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI..</param>
        /// <param name="inboxType">Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send)..</param>
        /// <param name="readOnly">Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes. (required).</param>
        /// <param name="virtualInbox">Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions. (required).</param>
        /// <param name="functionsAs">Inbox function if used as a primitive for another system..</param>
        public InboxDto(Guid id = default(Guid), Guid? userId = default(Guid?), DateTime createdAt = default(DateTime), string name = default(string), Guid? domainId = default(Guid?), string description = default(string), string emailAddress = default(string), string expiresAt = default(string), bool favourite = default(bool), List<string> tags = default(List<string>), InboxTypeEnum? inboxType = default(InboxTypeEnum?), bool readOnly = default(bool), bool virtualInbox = default(bool), FunctionsAsEnum? functionsAs = default(FunctionsAsEnum?))
        {
            this.Id = id;
            this.CreatedAt = createdAt;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for InboxDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.Favourite = favourite;
            this.ReadOnly = readOnly;
            this.VirtualInbox = virtualInbox;
            this.UserId = userId;
            this.Name = name;
            this.DomainId = domainId;
            this.Description = description;
            this.ExpiresAt = expiresAt;
            this.Tags = tags;
            this.InboxType = inboxType;
            this.FunctionsAs = functionsAs;
        }

        /// <summary>
        /// ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.
        /// </summary>
        /// <value>ID of the inbox. The ID is a UUID-V4 format string. Use the inboxId for calls to Inbox and Email Controller endpoints. See the emailAddress property for the email address or the inbox. To get emails in an inbox use the WaitFor and Inbox Controller methods &#x60;waitForLatestEmail&#x60; and &#x60;getEmails&#x60; methods respectively. Inboxes can be used with aliases to forward emails automatically.</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// ID of user that inbox belongs to
        /// </summary>
        /// <value>ID of user that inbox belongs to</value>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.
        /// </summary>
        /// <value>When the inbox was created. Time stamps are in ISO DateTime Format &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX&#x60; e.g. &#x60;2000-10-31T01:30:00.000-05:00&#x60;.</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search
        /// </summary>
        /// <value>Name of the inbox and used as the sender name when sending emails .Displayed in the dashboard for easier search</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// ID of custom domain used by the inbox if any
        /// </summary>
        /// <value>ID of custom domain used by the inbox if any</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Description of an inbox for labelling and searching purposes
        /// </summary>
        /// <value>Description of an inbox for labelling and searching purposes</value>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.
        /// </summary>
        /// <value>The inbox&#39;s email address. Inbox projections and previews may not include the email address. To view the email address fetch the inbox entity directly. Send an email to this address and the inbox will receive and store it for you. Note the email address in MailSlurp match characters exactly and are case sensitive so &#x60;+123&#x60; additions are considered different addresses. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.</value>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.
        /// </summary>
        /// <value>Inbox expiration time. When, if ever, the inbox should expire and be deleted. If null then this inbox is permanent and the emails in it won&#39;t be deleted. This is the default behavior unless expiration date is set. If an expiration date is set and the time is reached MailSlurp will expire the inbox and move it to an expired inbox entity. You can still access the emails belonging to it but it can no longer send or receive email.</value>
        [DataMember(Name = "expiresAt", EmitDefaultValue = true)]
        public string ExpiresAt { get; set; }

        /// <summary>
        /// Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite inbox. Make an inbox a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "favourite", IsRequired = true, EmitDefaultValue = true)]
        public bool Favourite { get; set; }

        /// <summary>
        /// Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.
        /// </summary>
        /// <value>Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes.
        /// </summary>
        /// <value>Is the inbox readOnly for the caller. Read only means can not be deleted or modified. This flag is present when using team accounts and shared inboxes.</value>
        [DataMember(Name = "readOnly", IsRequired = true, EmitDefaultValue = true)]
        public bool ReadOnly { get; set; }

        /// <summary>
        /// Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.
        /// </summary>
        /// <value>Virtual inbox can receive email but will not send emails to real recipients. Will save sent email record but never send an actual email. Perfect for testing mail server actions.</value>
        [DataMember(Name = "virtualInbox", IsRequired = true, EmitDefaultValue = true)]
        public bool VirtualInbox { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  ExpiresAt: ").Append(ExpiresAt).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  InboxType: ").Append(InboxType).Append("\n");
            sb.Append("  ReadOnly: ").Append(ReadOnly).Append("\n");
            sb.Append("  VirtualInbox: ").Append(VirtualInbox).Append("\n");
            sb.Append("  FunctionsAs: ").Append(FunctionsAs).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxDto);
        }

        /// <summary>
        /// Returns true if InboxDto instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.ExpiresAt == input.ExpiresAt ||
                    (this.ExpiresAt != null &&
                    this.ExpiresAt.Equals(input.ExpiresAt))
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    this.Favourite.Equals(input.Favourite)
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.InboxType == input.InboxType ||
                    this.InboxType.Equals(input.InboxType)
                ) && 
                (
                    this.ReadOnly == input.ReadOnly ||
                    this.ReadOnly.Equals(input.ReadOnly)
                ) && 
                (
                    this.VirtualInbox == input.VirtualInbox ||
                    this.VirtualInbox.Equals(input.VirtualInbox)
                ) && 
                (
                    this.FunctionsAs == input.FunctionsAs ||
                    this.FunctionsAs.Equals(input.FunctionsAs)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.ExpiresAt != null)
                {
                    hashCode = (hashCode * 59) + this.ExpiresAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.InboxType.GetHashCode();
                hashCode = (hashCode * 59) + this.ReadOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.VirtualInbox.GetHashCode();
                hashCode = (hashCode * 59) + this.FunctionsAs.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxByNameResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of search for inbox by name
    /// </summary>
    [DataContract(Name = "InboxByNameResult")]
    public partial class InboxByNameResult : IEquatable<InboxByNameResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxByNameResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxByNameResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxByNameResult" /> class.
        /// </summary>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="exists">exists (required).</param>
        public InboxByNameResult(Guid? inboxId = default(Guid?), bool exists = default(bool))
        {
            this.Exists = exists;
            this.InboxId = inboxId;
        }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Exists
        /// </summary>
        [DataMember(Name = "exists", IsRequired = true, EmitDefaultValue = true)]
        public bool Exists { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxByNameResult {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Exists: ").Append(Exists).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxByNameResult);
        }

        /// <summary>
        /// Returns true if InboxByNameResult instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxByNameResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxByNameResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Exists == input.Exists ||
                    this.Exists.Equals(input.Exists)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Exists.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/InboxByEmailAddressResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result of search for inbox by email address
    /// </summary>
    [DataContract(Name = "InboxByEmailAddressResult")]
    public partial class InboxByEmailAddressResult : IEquatable<InboxByEmailAddressResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxByEmailAddressResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected InboxByEmailAddressResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="InboxByEmailAddressResult" /> class.
        /// </summary>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="exists">exists (required).</param>
        public InboxByEmailAddressResult(Guid? inboxId = default(Guid?), bool exists = default(bool))
        {
            this.Exists = exists;
            this.InboxId = inboxId;
        }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Exists
        /// </summary>
        [DataMember(Name = "exists", IsRequired = true, EmitDefaultValue = true)]
        public bool Exists { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class InboxByEmailAddressResult {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Exists: ").Append(Exists).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as InboxByEmailAddressResult);
        }

        /// <summary>
        /// Returns true if InboxByEmailAddressResult instances are equal
        /// </summary>
        /// <param name="input">Instance of InboxByEmailAddressResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(InboxByEmailAddressResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Exists == input.Exists ||
                    this.Exists.Equals(input.Exists)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Exists.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapUpdateFlagsOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapUpdateFlagsOptions
    /// </summary>
    [DataContract(Name = "ImapUpdateFlagsOptions")]
    public partial class ImapUpdateFlagsOptions : IEquatable<ImapUpdateFlagsOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapUpdateFlagsOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapUpdateFlagsOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapUpdateFlagsOptions" /> class.
        /// </summary>
        /// <param name="operation">operation (required).</param>
        /// <param name="flags">flags.</param>
        /// <param name="uidSet">uidSet.</param>
        /// <param name="seqSet">seqSet.</param>
        public ImapUpdateFlagsOptions(string operation = default(string), List<string> flags = default(List<string>), string uidSet = default(string), string seqSet = default(string))
        {
            // to ensure "operation" is required (not null)
            if (operation == null)
            {
                throw new ArgumentNullException("operation is a required property for ImapUpdateFlagsOptions and cannot be null");
            }
            this.Operation = operation;
            this.Flags = flags;
            this.UidSet = uidSet;
            this.SeqSet = seqSet;
        }

        /// <summary>
        /// Gets or Sets Operation
        /// </summary>
        [DataMember(Name = "operation", IsRequired = true, EmitDefaultValue = true)]
        public string Operation { get; set; }

        /// <summary>
        /// Gets or Sets Flags
        /// </summary>
        [DataMember(Name = "flags", EmitDefaultValue = true)]
        public List<string> Flags { get; set; }

        /// <summary>
        /// Gets or Sets UidSet
        /// </summary>
        [DataMember(Name = "uidSet", EmitDefaultValue = true)]
        public string UidSet { get; set; }

        /// <summary>
        /// Gets or Sets SeqSet
        /// </summary>
        [DataMember(Name = "seqSet", EmitDefaultValue = true)]
        public string SeqSet { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapUpdateFlagsOptions {\n");
            sb.Append("  Operation: ").Append(Operation).Append("\n");
            sb.Append("  Flags: ").Append(Flags).Append("\n");
            sb.Append("  UidSet: ").Append(UidSet).Append("\n");
            sb.Append("  SeqSet: ").Append(SeqSet).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapUpdateFlagsOptions);
        }

        /// <summary>
        /// Returns true if ImapUpdateFlagsOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapUpdateFlagsOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapUpdateFlagsOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Operation == input.Operation ||
                    (this.Operation != null &&
                    this.Operation.Equals(input.Operation))
                ) && 
                (
                    this.Flags == input.Flags ||
                    this.Flags != null &&
                    input.Flags != null &&
                    this.Flags.SequenceEqual(input.Flags)
                ) && 
                (
                    this.UidSet == input.UidSet ||
                    (this.UidSet != null &&
                    this.UidSet.Equals(input.UidSet))
                ) && 
                (
                    this.SeqSet == input.SeqSet ||
                    (this.SeqSet != null &&
                    this.SeqSet.Equals(input.SeqSet))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Operation != null)
                {
                    hashCode = (hashCode * 59) + this.Operation.GetHashCode();
                }
                if (this.Flags != null)
                {
                    hashCode = (hashCode * 59) + this.Flags.GetHashCode();
                }
                if (this.UidSet != null)
                {
                    hashCode = (hashCode * 59) + this.UidSet.GetHashCode();
                }
                if (this.SeqSet != null)
                {
                    hashCode = (hashCode * 59) + this.SeqSet.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapSmtpAccessServers.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IMAP and SMTP server endpoints for MailSlurp
    /// </summary>
    [DataContract(Name = "ImapSmtpAccessServers")]
    public partial class ImapSmtpAccessServers : IEquatable<ImapSmtpAccessServers>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapSmtpAccessServers" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapSmtpAccessServers() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapSmtpAccessServers" /> class.
        /// </summary>
        /// <param name="imapServer">imapServer (required).</param>
        /// <param name="secureImapServer">secureImapServer (required).</param>
        /// <param name="smtpServer">smtpServer (required).</param>
        /// <param name="secureSmtpServer">secureSmtpServer (required).</param>
        public ImapSmtpAccessServers(ServerEndpoints imapServer = default(ServerEndpoints), ServerEndpoints secureImapServer = default(ServerEndpoints), ServerEndpoints smtpServer = default(ServerEndpoints), ServerEndpoints secureSmtpServer = default(ServerEndpoints))
        {
            // to ensure "imapServer" is required (not null)
            if (imapServer == null)
            {
                throw new ArgumentNullException("imapServer is a required property for ImapSmtpAccessServers and cannot be null");
            }
            this.ImapServer = imapServer;
            // to ensure "secureImapServer" is required (not null)
            if (secureImapServer == null)
            {
                throw new ArgumentNullException("secureImapServer is a required property for ImapSmtpAccessServers and cannot be null");
            }
            this.SecureImapServer = secureImapServer;
            // to ensure "smtpServer" is required (not null)
            if (smtpServer == null)
            {
                throw new ArgumentNullException("smtpServer is a required property for ImapSmtpAccessServers and cannot be null");
            }
            this.SmtpServer = smtpServer;
            // to ensure "secureSmtpServer" is required (not null)
            if (secureSmtpServer == null)
            {
                throw new ArgumentNullException("secureSmtpServer is a required property for ImapSmtpAccessServers and cannot be null");
            }
            this.SecureSmtpServer = secureSmtpServer;
        }

        /// <summary>
        /// Gets or Sets ImapServer
        /// </summary>
        [DataMember(Name = "imapServer", IsRequired = true, EmitDefaultValue = true)]
        public ServerEndpoints ImapServer { get; set; }

        /// <summary>
        /// Gets or Sets SecureImapServer
        /// </summary>
        [DataMember(Name = "secureImapServer", IsRequired = true, EmitDefaultValue = true)]
        public ServerEndpoints SecureImapServer { get; set; }

        /// <summary>
        /// Gets or Sets SmtpServer
        /// </summary>
        [DataMember(Name = "smtpServer", IsRequired = true, EmitDefaultValue = true)]
        public ServerEndpoints SmtpServer { get; set; }

        /// <summary>
        /// Gets or Sets SecureSmtpServer
        /// </summary>
        [DataMember(Name = "secureSmtpServer", IsRequired = true, EmitDefaultValue = true)]
        public ServerEndpoints SecureSmtpServer { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapSmtpAccessServers {\n");
            sb.Append("  ImapServer: ").Append(ImapServer).Append("\n");
            sb.Append("  SecureImapServer: ").Append(SecureImapServer).Append("\n");
            sb.Append("  SmtpServer: ").Append(SmtpServer).Append("\n");
            sb.Append("  SecureSmtpServer: ").Append(SecureSmtpServer).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapSmtpAccessServers);
        }

        /// <summary>
        /// Returns true if ImapSmtpAccessServers instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapSmtpAccessServers to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapSmtpAccessServers input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ImapServer == input.ImapServer ||
                    (this.ImapServer != null &&
                    this.ImapServer.Equals(input.ImapServer))
                ) && 
                (
                    this.SecureImapServer == input.SecureImapServer ||
                    (this.SecureImapServer != null &&
                    this.SecureImapServer.Equals(input.SecureImapServer))
                ) && 
                (
                    this.SmtpServer == input.SmtpServer ||
                    (this.SmtpServer != null &&
                    this.SmtpServer.Equals(input.SmtpServer))
                ) && 
                (
                    this.SecureSmtpServer == input.SecureSmtpServer ||
                    (this.SecureSmtpServer != null &&
                    this.SecureSmtpServer.Equals(input.SecureSmtpServer))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ImapServer != null)
                {
                    hashCode = (hashCode * 59) + this.ImapServer.GetHashCode();
                }
                if (this.SecureImapServer != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapServer.GetHashCode();
                }
                if (this.SmtpServer != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpServer.GetHashCode();
                }
                if (this.SecureSmtpServer != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpServer.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapSmtpAccessDetails.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Access details for inbox using SMTP or IMAP
    /// </summary>
    [DataContract(Name = "ImapSmtpAccessDetails")]
    public partial class ImapSmtpAccessDetails : IEquatable<ImapSmtpAccessDetails>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapSmtpAccessDetails" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapSmtpAccessDetails() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapSmtpAccessDetails" /> class.
        /// </summary>
        /// <param name="secureSmtpServerHost">Secure TLS SMTP server host domain (required).</param>
        /// <param name="secureSmtpServerPort">Secure TLS SMTP server host port (required).</param>
        /// <param name="secureSmtpUsername">Secure TLS SMTP username for login (required).</param>
        /// <param name="secureSmtpPassword">Secure TLS SMTP password for login (required).</param>
        /// <param name="smtpServerHost">SMTP server host domain (required).</param>
        /// <param name="smtpServerPort">SMTP server host port (required).</param>
        /// <param name="smtpUsername">SMTP username for login (required).</param>
        /// <param name="smtpPassword">SMTP password for login (required).</param>
        /// <param name="secureImapServerHost">Secure TLS IMAP server host domain (required).</param>
        /// <param name="secureImapServerPort">Secure TLS IMAP server host port (required).</param>
        /// <param name="secureImapUsername">Secure TLS IMAP username for login (required).</param>
        /// <param name="secureImapPassword">Secure TLS IMAP password for login (required).</param>
        /// <param name="imapServerHost">IMAP server host domain (required).</param>
        /// <param name="imapServerPort">IMAP server host port (required).</param>
        /// <param name="imapUsername">IMAP username for login (required).</param>
        /// <param name="imapPassword">IMAP password for login (required).</param>
        /// <param name="imapMailbox">IMAP mailbox to SELECT (required).</param>
        /// <param name="mailFromDomain">Mail from domain or SMTP HELO value.</param>
        public ImapSmtpAccessDetails(string secureSmtpServerHost = default(string), int secureSmtpServerPort = default(int), string secureSmtpUsername = default(string), string secureSmtpPassword = default(string), string smtpServerHost = default(string), int smtpServerPort = default(int), string smtpUsername = default(string), string smtpPassword = default(string), string secureImapServerHost = default(string), int secureImapServerPort = default(int), string secureImapUsername = default(string), string secureImapPassword = default(string), string imapServerHost = default(string), int imapServerPort = default(int), string imapUsername = default(string), string imapPassword = default(string), string imapMailbox = default(string), string mailFromDomain = default(string))
        {
            // to ensure "secureSmtpServerHost" is required (not null)
            if (secureSmtpServerHost == null)
            {
                throw new ArgumentNullException("secureSmtpServerHost is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpServerHost = secureSmtpServerHost;
            this.SecureSmtpServerPort = secureSmtpServerPort;
            // to ensure "secureSmtpUsername" is required (not null)
            if (secureSmtpUsername == null)
            {
                throw new ArgumentNullException("secureSmtpUsername is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpUsername = secureSmtpUsername;
            // to ensure "secureSmtpPassword" is required (not null)
            if (secureSmtpPassword == null)
            {
                throw new ArgumentNullException("secureSmtpPassword is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureSmtpPassword = secureSmtpPassword;
            // to ensure "smtpServerHost" is required (not null)
            if (smtpServerHost == null)
            {
                throw new ArgumentNullException("smtpServerHost is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SmtpServerHost = smtpServerHost;
            this.SmtpServerPort = smtpServerPort;
            // to ensure "smtpUsername" is required (not null)
            if (smtpUsername == null)
            {
                throw new ArgumentNullException("smtpUsername is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SmtpUsername = smtpUsername;
            // to ensure "smtpPassword" is required (not null)
            if (smtpPassword == null)
            {
                throw new ArgumentNullException("smtpPassword is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SmtpPassword = smtpPassword;
            // to ensure "secureImapServerHost" is required (not null)
            if (secureImapServerHost == null)
            {
                throw new ArgumentNullException("secureImapServerHost is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureImapServerHost = secureImapServerHost;
            this.SecureImapServerPort = secureImapServerPort;
            // to ensure "secureImapUsername" is required (not null)
            if (secureImapUsername == null)
            {
                throw new ArgumentNullException("secureImapUsername is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureImapUsername = secureImapUsername;
            // to ensure "secureImapPassword" is required (not null)
            if (secureImapPassword == null)
            {
                throw new ArgumentNullException("secureImapPassword is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.SecureImapPassword = secureImapPassword;
            // to ensure "imapServerHost" is required (not null)
            if (imapServerHost == null)
            {
                throw new ArgumentNullException("imapServerHost is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.ImapServerHost = imapServerHost;
            this.ImapServerPort = imapServerPort;
            // to ensure "imapUsername" is required (not null)
            if (imapUsername == null)
            {
                throw new ArgumentNullException("imapUsername is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.ImapUsername = imapUsername;
            // to ensure "imapPassword" is required (not null)
            if (imapPassword == null)
            {
                throw new ArgumentNullException("imapPassword is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.ImapPassword = imapPassword;
            // to ensure "imapMailbox" is required (not null)
            if (imapMailbox == null)
            {
                throw new ArgumentNullException("imapMailbox is a required property for ImapSmtpAccessDetails and cannot be null");
            }
            this.ImapMailbox = imapMailbox;
            this.MailFromDomain = mailFromDomain;
        }

        /// <summary>
        /// Secure TLS SMTP server host domain
        /// </summary>
        /// <value>Secure TLS SMTP server host domain</value>
        [DataMember(Name = "secureSmtpServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpServerHost { get; set; }

        /// <summary>
        /// Secure TLS SMTP server host port
        /// </summary>
        /// <value>Secure TLS SMTP server host port</value>
        [DataMember(Name = "secureSmtpServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SecureSmtpServerPort { get; set; }

        /// <summary>
        /// Secure TLS SMTP username for login
        /// </summary>
        /// <value>Secure TLS SMTP username for login</value>
        [DataMember(Name = "secureSmtpUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpUsername { get; set; }

        /// <summary>
        /// Secure TLS SMTP password for login
        /// </summary>
        /// <value>Secure TLS SMTP password for login</value>
        [DataMember(Name = "secureSmtpPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SecureSmtpPassword { get; set; }

        /// <summary>
        /// SMTP server host domain
        /// </summary>
        /// <value>SMTP server host domain</value>
        [DataMember(Name = "smtpServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpServerHost { get; set; }

        /// <summary>
        /// SMTP server host port
        /// </summary>
        /// <value>SMTP server host port</value>
        [DataMember(Name = "smtpServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SmtpServerPort { get; set; }

        /// <summary>
        /// SMTP username for login
        /// </summary>
        /// <value>SMTP username for login</value>
        [DataMember(Name = "smtpUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpUsername { get; set; }

        /// <summary>
        /// SMTP password for login
        /// </summary>
        /// <value>SMTP password for login</value>
        [DataMember(Name = "smtpPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpPassword { get; set; }

        /// <summary>
        /// Secure TLS IMAP server host domain
        /// </summary>
        /// <value>Secure TLS IMAP server host domain</value>
        [DataMember(Name = "secureImapServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapServerHost { get; set; }

        /// <summary>
        /// Secure TLS IMAP server host port
        /// </summary>
        /// <value>Secure TLS IMAP server host port</value>
        [DataMember(Name = "secureImapServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SecureImapServerPort { get; set; }

        /// <summary>
        /// Secure TLS IMAP username for login
        /// </summary>
        /// <value>Secure TLS IMAP username for login</value>
        [DataMember(Name = "secureImapUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapUsername { get; set; }

        /// <summary>
        /// Secure TLS IMAP password for login
        /// </summary>
        /// <value>Secure TLS IMAP password for login</value>
        [DataMember(Name = "secureImapPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapPassword { get; set; }

        /// <summary>
        /// IMAP server host domain
        /// </summary>
        /// <value>IMAP server host domain</value>
        [DataMember(Name = "imapServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string ImapServerHost { get; set; }

        /// <summary>
        /// IMAP server host port
        /// </summary>
        /// <value>IMAP server host port</value>
        [DataMember(Name = "imapServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int ImapServerPort { get; set; }

        /// <summary>
        /// IMAP username for login
        /// </summary>
        /// <value>IMAP username for login</value>
        [DataMember(Name = "imapUsername", IsRequired = true, EmitDefaultValue = true)]
        public string ImapUsername { get; set; }

        /// <summary>
        /// IMAP password for login
        /// </summary>
        /// <value>IMAP password for login</value>
        [DataMember(Name = "imapPassword", IsRequired = true, EmitDefaultValue = true)]
        public string ImapPassword { get; set; }

        /// <summary>
        /// IMAP mailbox to SELECT
        /// </summary>
        /// <value>IMAP mailbox to SELECT</value>
        [DataMember(Name = "imapMailbox", IsRequired = true, EmitDefaultValue = true)]
        public string ImapMailbox { get; set; }

        /// <summary>
        /// Mail from domain or SMTP HELO value
        /// </summary>
        /// <value>Mail from domain or SMTP HELO value</value>
        [DataMember(Name = "mailFromDomain", EmitDefaultValue = true)]
        public string MailFromDomain { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapSmtpAccessDetails {\n");
            sb.Append("  SecureSmtpServerHost: ").Append(SecureSmtpServerHost).Append("\n");
            sb.Append("  SecureSmtpServerPort: ").Append(SecureSmtpServerPort).Append("\n");
            sb.Append("  SecureSmtpUsername: ").Append(SecureSmtpUsername).Append("\n");
            sb.Append("  SecureSmtpPassword: ").Append(SecureSmtpPassword).Append("\n");
            sb.Append("  SmtpServerHost: ").Append(SmtpServerHost).Append("\n");
            sb.Append("  SmtpServerPort: ").Append(SmtpServerPort).Append("\n");
            sb.Append("  SmtpUsername: ").Append(SmtpUsername).Append("\n");
            sb.Append("  SmtpPassword: ").Append(SmtpPassword).Append("\n");
            sb.Append("  SecureImapServerHost: ").Append(SecureImapServerHost).Append("\n");
            sb.Append("  SecureImapServerPort: ").Append(SecureImapServerPort).Append("\n");
            sb.Append("  SecureImapUsername: ").Append(SecureImapUsername).Append("\n");
            sb.Append("  SecureImapPassword: ").Append(SecureImapPassword).Append("\n");
            sb.Append("  ImapServerHost: ").Append(ImapServerHost).Append("\n");
            sb.Append("  ImapServerPort: ").Append(ImapServerPort).Append("\n");
            sb.Append("  ImapUsername: ").Append(ImapUsername).Append("\n");
            sb.Append("  ImapPassword: ").Append(ImapPassword).Append("\n");
            sb.Append("  ImapMailbox: ").Append(ImapMailbox).Append("\n");
            sb.Append("  MailFromDomain: ").Append(MailFromDomain).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapSmtpAccessDetails);
        }

        /// <summary>
        /// Returns true if ImapSmtpAccessDetails instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapSmtpAccessDetails to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapSmtpAccessDetails input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SecureSmtpServerHost == input.SecureSmtpServerHost ||
                    (this.SecureSmtpServerHost != null &&
                    this.SecureSmtpServerHost.Equals(input.SecureSmtpServerHost))
                ) && 
                (
                    this.SecureSmtpServerPort == input.SecureSmtpServerPort ||
                    this.SecureSmtpServerPort.Equals(input.SecureSmtpServerPort)
                ) && 
                (
                    this.SecureSmtpUsername == input.SecureSmtpUsername ||
                    (this.SecureSmtpUsername != null &&
                    this.SecureSmtpUsername.Equals(input.SecureSmtpUsername))
                ) && 
                (
                    this.SecureSmtpPassword == input.SecureSmtpPassword ||
                    (this.SecureSmtpPassword != null &&
                    this.SecureSmtpPassword.Equals(input.SecureSmtpPassword))
                ) && 
                (
                    this.SmtpServerHost == input.SmtpServerHost ||
                    (this.SmtpServerHost != null &&
                    this.SmtpServerHost.Equals(input.SmtpServerHost))
                ) && 
                (
                    this.SmtpServerPort == input.SmtpServerPort ||
                    this.SmtpServerPort.Equals(input.SmtpServerPort)
                ) && 
                (
                    this.SmtpUsername == input.SmtpUsername ||
                    (this.SmtpUsername != null &&
                    this.SmtpUsername.Equals(input.SmtpUsername))
                ) && 
                (
                    this.SmtpPassword == input.SmtpPassword ||
                    (this.SmtpPassword != null &&
                    this.SmtpPassword.Equals(input.SmtpPassword))
                ) && 
                (
                    this.SecureImapServerHost == input.SecureImapServerHost ||
                    (this.SecureImapServerHost != null &&
                    this.SecureImapServerHost.Equals(input.SecureImapServerHost))
                ) && 
                (
                    this.SecureImapServerPort == input.SecureImapServerPort ||
                    this.SecureImapServerPort.Equals(input.SecureImapServerPort)
                ) && 
                (
                    this.SecureImapUsername == input.SecureImapUsername ||
                    (this.SecureImapUsername != null &&
                    this.SecureImapUsername.Equals(input.SecureImapUsername))
                ) && 
                (
                    this.SecureImapPassword == input.SecureImapPassword ||
                    (this.SecureImapPassword != null &&
                    this.SecureImapPassword.Equals(input.SecureImapPassword))
                ) && 
                (
                    this.ImapServerHost == input.ImapServerHost ||
                    (this.ImapServerHost != null &&
                    this.ImapServerHost.Equals(input.ImapServerHost))
                ) && 
                (
                    this.ImapServerPort == input.ImapServerPort ||
                    this.ImapServerPort.Equals(input.ImapServerPort)
                ) && 
                (
                    this.ImapUsername == input.ImapUsername ||
                    (this.ImapUsername != null &&
                    this.ImapUsername.Equals(input.ImapUsername))
                ) && 
                (
                    this.ImapPassword == input.ImapPassword ||
                    (this.ImapPassword != null &&
                    this.ImapPassword.Equals(input.ImapPassword))
                ) && 
                (
                    this.ImapMailbox == input.ImapMailbox ||
                    (this.ImapMailbox != null &&
                    this.ImapMailbox.Equals(input.ImapMailbox))
                ) && 
                (
                    this.MailFromDomain == input.MailFromDomain ||
                    (this.MailFromDomain != null &&
                    this.MailFromDomain.Equals(input.MailFromDomain))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SecureSmtpServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SecureSmtpServerPort.GetHashCode();
                if (this.SecureSmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpUsername.GetHashCode();
                }
                if (this.SecureSmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SecureSmtpPassword.GetHashCode();
                }
                if (this.SmtpServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpServerPort.GetHashCode();
                if (this.SmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpUsername.GetHashCode();
                }
                if (this.SmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpPassword.GetHashCode();
                }
                if (this.SecureImapServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SecureImapServerPort.GetHashCode();
                if (this.SecureImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapUsername.GetHashCode();
                }
                if (this.SecureImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapPassword.GetHashCode();
                }
                if (this.ImapServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.ImapServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ImapServerPort.GetHashCode();
                if (this.ImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.ImapUsername.GetHashCode();
                }
                if (this.ImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPassword.GetHashCode();
                }
                if (this.ImapMailbox != null)
                {
                    hashCode = (hashCode * 59) + this.ImapMailbox.GetHashCode();
                }
                if (this.MailFromDomain != null)
                {
                    hashCode = (hashCode * 59) + this.MailFromDomain.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerStatusResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerStatusResult
    /// </summary>
    [DataContract(Name = "ImapServerStatusResult")]
    public partial class ImapServerStatusResult : IEquatable<ImapServerStatusResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerStatusResult" /> class.
        /// </summary>
        /// <param name="result">result.</param>
        public ImapServerStatusResult(ImapMailboxStatus result = default(ImapMailboxStatus))
        {
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", EmitDefaultValue = true)]
        public ImapMailboxStatus Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerStatusResult {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerStatusResult);
        }

        /// <summary>
        /// Returns true if ImapServerStatusResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerStatusResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerStatusResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerStatusOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerStatusOptions
    /// </summary>
    [DataContract(Name = "ImapServerStatusOptions")]
    public partial class ImapServerStatusOptions : IEquatable<ImapServerStatusOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines StatusItems
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusItemsEnum
        {
            /// <summary>
            /// Enum MESSAGES for value: MESSAGES
            /// </summary>
            [EnumMember(Value = "MESSAGES")]
            MESSAGES = 1,

            /// <summary>
            /// Enum RECENT for value: RECENT
            /// </summary>
            [EnumMember(Value = "RECENT")]
            RECENT = 2,

            /// <summary>
            /// Enum UIDNEXT for value: UIDNEXT
            /// </summary>
            [EnumMember(Value = "UIDNEXT")]
            UIDNEXT = 3,

            /// <summary>
            /// Enum UIDVALIDITY for value: UIDVALIDITY
            /// </summary>
            [EnumMember(Value = "UIDVALIDITY")]
            UIDVALIDITY = 4,

            /// <summary>
            /// Enum UNSEEN for value: UNSEEN
            /// </summary>
            [EnumMember(Value = "UNSEEN")]
            UNSEEN = 5,

            /// <summary>
            /// Enum APPENDLIMIT for value: APPENDLIMIT
            /// </summary>
            [EnumMember(Value = "APPENDLIMIT")]
            APPENDLIMIT = 6

        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerStatusOptions" /> class.
        /// </summary>
        /// <param name="name">name.</param>
        /// <param name="statusItems">statusItems.</param>
        public ImapServerStatusOptions(string name = default(string), List<StatusItemsEnum> statusItems = default(List<StatusItemsEnum>))
        {
            this.Name = name;
            this.StatusItems = statusItems;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets StatusItems
        /// </summary>
        [DataMember(Name = "statusItems", EmitDefaultValue = true)]
        public List<ImapServerStatusOptions.StatusItemsEnum> StatusItems { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerStatusOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  StatusItems: ").Append(StatusItems).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerStatusOptions);
        }

        /// <summary>
        /// Returns true if ImapServerStatusOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerStatusOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerStatusOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.StatusItems == input.StatusItems ||
                    this.StatusItems != null &&
                    input.StatusItems != null &&
                    this.StatusItems.SequenceEqual(input.StatusItems)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.StatusItems != null)
                {
                    hashCode = (hashCode * 59) + this.StatusItems.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerSearchResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerSearchResult
    /// </summary>
    [DataContract(Name = "ImapServerSearchResult")]
    public partial class ImapServerSearchResult : IEquatable<ImapServerSearchResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerSearchResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapServerSearchResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerSearchResult" /> class.
        /// </summary>
        /// <param name="results">results (required).</param>
        public ImapServerSearchResult(List<ImapEmailProjection> results = default(List<ImapEmailProjection>))
        {
            // to ensure "results" is required (not null)
            if (results == null)
            {
                throw new ArgumentNullException("results is a required property for ImapServerSearchResult and cannot be null");
            }
            this.Results = results;
        }

        /// <summary>
        /// Gets or Sets Results
        /// </summary>
        [DataMember(Name = "results", IsRequired = true, EmitDefaultValue = true)]
        public List<ImapEmailProjection> Results { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerSearchResult {\n");
            sb.Append("  Results: ").Append(Results).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerSearchResult);
        }

        /// <summary>
        /// Returns true if ImapServerSearchResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerSearchResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerSearchResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Results == input.Results ||
                    this.Results != null &&
                    input.Results != null &&
                    this.Results.SequenceEqual(input.Results)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Results != null)
                {
                    hashCode = (hashCode * 59) + this.Results.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerSearchOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IMAP server search options
    /// </summary>
    [DataContract(Name = "ImapServerSearchOptions")]
    public partial class ImapServerSearchOptions : IEquatable<ImapServerSearchOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerSearchOptions" /> class.
        /// </summary>
        /// <param name="seqNum">seqNum.</param>
        /// <param name="uid">uid.</param>
        /// <param name="since">since.</param>
        /// <param name="before">before.</param>
        /// <param name="sentSince">sentSince.</param>
        /// <param name="sentBefore">sentBefore.</param>
        /// <param name="header">header.</param>
        /// <param name="body">body.</param>
        /// <param name="text">text.</param>
        /// <param name="withFlags">withFlags.</param>
        /// <param name="withoutFlags">withoutFlags.</param>
        public ImapServerSearchOptions(string seqNum = default(string), string uid = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), DateTime? sentSince = default(DateTime?), DateTime? sentBefore = default(DateTime?), Dictionary<string, List<string>> header = default(Dictionary<string, List<string>>), List<string> body = default(List<string>), List<string> text = default(List<string>), List<string> withFlags = default(List<string>), List<string> withoutFlags = default(List<string>))
        {
            this.SeqNum = seqNum;
            this.Uid = uid;
            this.Since = since;
            this.Before = before;
            this.SentSince = sentSince;
            this.SentBefore = sentBefore;
            this.Header = header;
            this.Body = body;
            this.Text = text;
            this.WithFlags = withFlags;
            this.WithoutFlags = withoutFlags;
        }

        /// <summary>
        /// Gets or Sets SeqNum
        /// </summary>
        [DataMember(Name = "seqNum", EmitDefaultValue = true)]
        public string SeqNum { get; set; }

        /// <summary>
        /// Gets or Sets Uid
        /// </summary>
        [DataMember(Name = "uid", EmitDefaultValue = true)]
        public string Uid { get; set; }

        /// <summary>
        /// Gets or Sets Since
        /// </summary>
        [DataMember(Name = "since", EmitDefaultValue = true)]
        public DateTime? Since { get; set; }

        /// <summary>
        /// Gets or Sets Before
        /// </summary>
        [DataMember(Name = "before", EmitDefaultValue = true)]
        public DateTime? Before { get; set; }

        /// <summary>
        /// Gets or Sets SentSince
        /// </summary>
        [DataMember(Name = "sentSince", EmitDefaultValue = true)]
        public DateTime? SentSince { get; set; }

        /// <summary>
        /// Gets or Sets SentBefore
        /// </summary>
        [DataMember(Name = "sentBefore", EmitDefaultValue = true)]
        public DateTime? SentBefore { get; set; }

        /// <summary>
        /// Gets or Sets Header
        /// </summary>
        [DataMember(Name = "header", EmitDefaultValue = true)]
        public Dictionary<string, List<string>> Header { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public List<string> Body { get; set; }

        /// <summary>
        /// Gets or Sets Text
        /// </summary>
        [DataMember(Name = "text", EmitDefaultValue = true)]
        public List<string> Text { get; set; }

        /// <summary>
        /// Gets or Sets WithFlags
        /// </summary>
        [DataMember(Name = "withFlags", EmitDefaultValue = true)]
        public List<string> WithFlags { get; set; }

        /// <summary>
        /// Gets or Sets WithoutFlags
        /// </summary>
        [DataMember(Name = "withoutFlags", EmitDefaultValue = true)]
        public List<string> WithoutFlags { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerSearchOptions {\n");
            sb.Append("  SeqNum: ").Append(SeqNum).Append("\n");
            sb.Append("  Uid: ").Append(Uid).Append("\n");
            sb.Append("  Since: ").Append(Since).Append("\n");
            sb.Append("  Before: ").Append(Before).Append("\n");
            sb.Append("  SentSince: ").Append(SentSince).Append("\n");
            sb.Append("  SentBefore: ").Append(SentBefore).Append("\n");
            sb.Append("  Header: ").Append(Header).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Text: ").Append(Text).Append("\n");
            sb.Append("  WithFlags: ").Append(WithFlags).Append("\n");
            sb.Append("  WithoutFlags: ").Append(WithoutFlags).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerSearchOptions);
        }

        /// <summary>
        /// Returns true if ImapServerSearchOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerSearchOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerSearchOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SeqNum == input.SeqNum ||
                    (this.SeqNum != null &&
                    this.SeqNum.Equals(input.SeqNum))
                ) && 
                (
                    this.Uid == input.Uid ||
                    (this.Uid != null &&
                    this.Uid.Equals(input.Uid))
                ) && 
                (
                    this.Since == input.Since ||
                    (this.Since != null &&
                    this.Since.Equals(input.Since))
                ) && 
                (
                    this.Before == input.Before ||
                    (this.Before != null &&
                    this.Before.Equals(input.Before))
                ) && 
                (
                    this.SentSince == input.SentSince ||
                    (this.SentSince != null &&
                    this.SentSince.Equals(input.SentSince))
                ) && 
                (
                    this.SentBefore == input.SentBefore ||
                    (this.SentBefore != null &&
                    this.SentBefore.Equals(input.SentBefore))
                ) && 
                (
                    this.Header == input.Header ||
                    this.Header != null &&
                    input.Header != null &&
                    this.Header.SequenceEqual(input.Header)
                ) && 
                (
                    this.Body == input.Body ||
                    this.Body != null &&
                    input.Body != null &&
                    this.Body.SequenceEqual(input.Body)
                ) && 
                (
                    this.Text == input.Text ||
                    this.Text != null &&
                    input.Text != null &&
                    this.Text.SequenceEqual(input.Text)
                ) && 
                (
                    this.WithFlags == input.WithFlags ||
                    this.WithFlags != null &&
                    input.WithFlags != null &&
                    this.WithFlags.SequenceEqual(input.WithFlags)
                ) && 
                (
                    this.WithoutFlags == input.WithoutFlags ||
                    this.WithoutFlags != null &&
                    input.WithoutFlags != null &&
                    this.WithoutFlags.SequenceEqual(input.WithoutFlags)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SeqNum != null)
                {
                    hashCode = (hashCode * 59) + this.SeqNum.GetHashCode();
                }
                if (this.Uid != null)
                {
                    hashCode = (hashCode * 59) + this.Uid.GetHashCode();
                }
                if (this.Since != null)
                {
                    hashCode = (hashCode * 59) + this.Since.GetHashCode();
                }
                if (this.Before != null)
                {
                    hashCode = (hashCode * 59) + this.Before.GetHashCode();
                }
                if (this.SentSince != null)
                {
                    hashCode = (hashCode * 59) + this.SentSince.GetHashCode();
                }
                if (this.SentBefore != null)
                {
                    hashCode = (hashCode * 59) + this.SentBefore.GetHashCode();
                }
                if (this.Header != null)
                {
                    hashCode = (hashCode * 59) + this.Header.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.Text != null)
                {
                    hashCode = (hashCode * 59) + this.Text.GetHashCode();
                }
                if (this.WithFlags != null)
                {
                    hashCode = (hashCode * 59) + this.WithFlags.GetHashCode();
                }
                if (this.WithoutFlags != null)
                {
                    hashCode = (hashCode * 59) + this.WithoutFlags.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerMailboxResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerMailboxResult
    /// </summary>
    [DataContract(Name = "ImapServerMailboxResult")]
    public partial class ImapServerMailboxResult : IEquatable<ImapServerMailboxResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerMailboxResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapServerMailboxResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerMailboxResult" /> class.
        /// </summary>
        /// <param name="message">message.</param>
        /// <param name="success">success (required).</param>
        public ImapServerMailboxResult(string message = default(string), bool success = default(bool))
        {
            this.Success = success;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Success
        /// </summary>
        [DataMember(Name = "success", IsRequired = true, EmitDefaultValue = true)]
        public bool Success { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerMailboxResult {\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Success: ").Append(Success).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerMailboxResult);
        }

        /// <summary>
        /// Returns true if ImapServerMailboxResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerMailboxResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerMailboxResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Success == input.Success ||
                    this.Success.Equals(input.Success)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Success.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerListResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerListResult
    /// </summary>
    [DataContract(Name = "ImapServerListResult")]
    public partial class ImapServerListResult : IEquatable<ImapServerListResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerListResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapServerListResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerListResult" /> class.
        /// </summary>
        /// <param name="results">results (required).</param>
        public ImapServerListResult(List<ImapEmailProjection> results = default(List<ImapEmailProjection>))
        {
            // to ensure "results" is required (not null)
            if (results == null)
            {
                throw new ArgumentNullException("results is a required property for ImapServerListResult and cannot be null");
            }
            this.Results = results;
        }

        /// <summary>
        /// Gets or Sets Results
        /// </summary>
        [DataMember(Name = "results", IsRequired = true, EmitDefaultValue = true)]
        public List<ImapEmailProjection> Results { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerListResult {\n");
            sb.Append("  Results: ").Append(Results).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerListResult);
        }

        /// <summary>
        /// Returns true if ImapServerListResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerListResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerListResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Results == input.Results ||
                    this.Results != null &&
                    input.Results != null &&
                    this.Results.SequenceEqual(input.Results)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Results != null)
                {
                    hashCode = (hashCode * 59) + this.Results.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerListOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerListOptions
    /// </summary>
    [DataContract(Name = "ImapServerListOptions")]
    public partial class ImapServerListOptions : IEquatable<ImapServerListOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerListOptions" /> class.
        /// </summary>
        /// <param name="uidSet">uidSet.</param>
        /// <param name="seqSet">seqSet.</param>
        public ImapServerListOptions(string uidSet = default(string), string seqSet = default(string))
        {
            this.UidSet = uidSet;
            this.SeqSet = seqSet;
        }

        /// <summary>
        /// Gets or Sets UidSet
        /// </summary>
        [DataMember(Name = "uidSet", EmitDefaultValue = true)]
        public string UidSet { get; set; }

        /// <summary>
        /// Gets or Sets SeqSet
        /// </summary>
        [DataMember(Name = "seqSet", EmitDefaultValue = true)]
        public string SeqSet { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerListOptions {\n");
            sb.Append("  UidSet: ").Append(UidSet).Append("\n");
            sb.Append("  SeqSet: ").Append(SeqSet).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerListOptions);
        }

        /// <summary>
        /// Returns true if ImapServerListOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerListOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerListOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.UidSet == input.UidSet ||
                    (this.UidSet != null &&
                    this.UidSet.Equals(input.UidSet))
                ) && 
                (
                    this.SeqSet == input.SeqSet ||
                    (this.SeqSet != null &&
                    this.SeqSet.Equals(input.SeqSet))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.UidSet != null)
                {
                    hashCode = (hashCode * 59) + this.UidSet.GetHashCode();
                }
                if (this.SeqSet != null)
                {
                    hashCode = (hashCode * 59) + this.SeqSet.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerGetResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapServerGetResult
    /// </summary>
    [DataContract(Name = "ImapServerGetResult")]
    public partial class ImapServerGetResult : IEquatable<ImapServerGetResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerGetResult" /> class.
        /// </summary>
        /// <param name="result">result.</param>
        public ImapServerGetResult(ImapEmailProjection result = default(ImapEmailProjection))
        {
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", EmitDefaultValue = false)]
        public ImapEmailProjection Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerGetResult {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerGetResult);
        }

        /// <summary>
        /// Returns true if ImapServerGetResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerGetResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerGetResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerFetchResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IMAP fetch email result
    /// </summary>
    [DataContract(Name = "ImapServerFetchResult")]
    public partial class ImapServerFetchResult : IEquatable<ImapServerFetchResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerFetchResult" /> class.
        /// </summary>
        /// <param name="result">result.</param>
        public ImapServerFetchResult(ImapServerFetchItem result = default(ImapServerFetchItem))
        {
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", EmitDefaultValue = true)]
        public ImapServerFetchItem Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerFetchResult {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerFetchResult);
        }

        /// <summary>
        /// Returns true if ImapServerFetchResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerFetchResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerFetchResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapServerFetchItem.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IMAP fetch content in raw format
    /// </summary>
    [DataContract(Name = "ImapServerFetchItem")]
    public partial class ImapServerFetchItem : IEquatable<ImapServerFetchItem>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerFetchItem" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapServerFetchItem() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapServerFetchItem" /> class.
        /// </summary>
        /// <param name="content">Content of the email (required).</param>
        /// <param name="id">ID of the email (required).</param>
        /// <param name="uid">UID of the email (required).</param>
        /// <param name="seqNum">Sequence number of the email (required).</param>
        /// <param name="read">Read status of the email (required).</param>
        public ImapServerFetchItem(string content = default(string), Guid id = default(Guid), long uid = default(long), long seqNum = default(long), bool read = default(bool))
        {
            // to ensure "content" is required (not null)
            if (content == null)
            {
                throw new ArgumentNullException("content is a required property for ImapServerFetchItem and cannot be null");
            }
            this.Content = content;
            this.Id = id;
            this.Uid = uid;
            this.SeqNum = seqNum;
            this.Read = read;
        }

        /// <summary>
        /// Content of the email
        /// </summary>
        /// <value>Content of the email</value>
        [DataMember(Name = "content", IsRequired = true, EmitDefaultValue = true)]
        public string Content { get; set; }

        /// <summary>
        /// ID of the email
        /// </summary>
        /// <value>ID of the email</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// UID of the email
        /// </summary>
        /// <value>UID of the email</value>
        [DataMember(Name = "uid", IsRequired = true, EmitDefaultValue = true)]
        public long Uid { get; set; }

        /// <summary>
        /// Sequence number of the email
        /// </summary>
        /// <value>Sequence number of the email</value>
        [DataMember(Name = "seqNum", IsRequired = true, EmitDefaultValue = true)]
        public long SeqNum { get; set; }

        /// <summary>
        /// Read status of the email
        /// </summary>
        /// <value>Read status of the email</value>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapServerFetchItem {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Uid: ").Append(Uid).Append("\n");
            sb.Append("  SeqNum: ").Append(SeqNum).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapServerFetchItem);
        }

        /// <summary>
        /// Returns true if ImapServerFetchItem instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapServerFetchItem to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapServerFetchItem input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    (this.Content != null &&
                    this.Content.Equals(input.Content))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Uid == input.Uid ||
                    this.Uid.Equals(input.Uid)
                ) && 
                (
                    this.SeqNum == input.SeqNum ||
                    this.SeqNum.Equals(input.SeqNum)
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Uid.GetHashCode();
                hashCode = (hashCode * 59) + this.SeqNum.GetHashCode();
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapMailboxStatus.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapMailboxStatus
    /// </summary>
    [DataContract(Name = "ImapMailboxStatus")]
    public partial class ImapMailboxStatus : IEquatable<ImapMailboxStatus>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapMailboxStatus" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapMailboxStatus() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapMailboxStatus" /> class.
        /// </summary>
        /// <param name="name">The mailbox name. (required).</param>
        /// <param name="readOnly">True if the mailbox is open in read-only mode. (required).</param>
        /// <param name="items">Results map (required).</param>
        /// <param name="flags">The mailbox flags. (required).</param>
        /// <param name="permanentFlags">The mailbox permanent flags. (required).</param>
        /// <param name="unseenSeqNum">The sequence number of the first unseen message in the mailbox. (required).</param>
        /// <param name="messages">The number of messages in this mailbox. (required).</param>
        /// <param name="recent">The number of messages not seen since the last time the mailbox was opened. (required).</param>
        /// <param name="unseen">The number of unread messages. (required).</param>
        /// <param name="uidNext">The next UID. (required).</param>
        /// <param name="uidValidity">Together with a UID, it is a unique identifier for a message. Must be greater than or equal to 1. (required).</param>
        /// <param name="appendLimit">Per-mailbox limit of message size. Set only if server supports the APPENDLIMIT extension.</param>
        public ImapMailboxStatus(string name = default(string), bool readOnly = default(bool), Object items = default(Object), List<string> flags = default(List<string>), List<string> permanentFlags = default(List<string>), long unseenSeqNum = default(long), int messages = default(int), int recent = default(int), int unseen = default(int), long uidNext = default(long), int uidValidity = default(int), int? appendLimit = default(int?))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for ImapMailboxStatus and cannot be null");
            }
            this.Name = name;
            this.ReadOnly = readOnly;
            // to ensure "items" is required (not null)
            if (items == null)
            {
                throw new ArgumentNullException("items is a required property for ImapMailboxStatus and cannot be null");
            }
            this.Items = items;
            // to ensure "flags" is required (not null)
            if (flags == null)
            {
                throw new ArgumentNullException("flags is a required property for ImapMailboxStatus and cannot be null");
            }
            this.Flags = flags;
            // to ensure "permanentFlags" is required (not null)
            if (permanentFlags == null)
            {
                throw new ArgumentNullException("permanentFlags is a required property for ImapMailboxStatus and cannot be null");
            }
            this.PermanentFlags = permanentFlags;
            this.UnseenSeqNum = unseenSeqNum;
            this.Messages = messages;
            this.Recent = recent;
            this.Unseen = unseen;
            this.UidNext = uidNext;
            this.UidValidity = uidValidity;
            this.AppendLimit = appendLimit;
        }

        /// <summary>
        /// The mailbox name.
        /// </summary>
        /// <value>The mailbox name.</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// True if the mailbox is open in read-only mode.
        /// </summary>
        /// <value>True if the mailbox is open in read-only mode.</value>
        [DataMember(Name = "readOnly", IsRequired = true, EmitDefaultValue = true)]
        public bool ReadOnly { get; set; }

        /// <summary>
        /// Results map
        /// </summary>
        /// <value>Results map</value>
        [DataMember(Name = "items", IsRequired = true, EmitDefaultValue = true)]
        public Object Items { get; set; }

        /// <summary>
        /// The mailbox flags.
        /// </summary>
        /// <value>The mailbox flags.</value>
        [DataMember(Name = "flags", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Flags { get; set; }

        /// <summary>
        /// The mailbox permanent flags.
        /// </summary>
        /// <value>The mailbox permanent flags.</value>
        [DataMember(Name = "permanentFlags", IsRequired = true, EmitDefaultValue = true)]
        public List<string> PermanentFlags { get; set; }

        /// <summary>
        /// The sequence number of the first unseen message in the mailbox.
        /// </summary>
        /// <value>The sequence number of the first unseen message in the mailbox.</value>
        [DataMember(Name = "unseenSeqNum", IsRequired = true, EmitDefaultValue = true)]
        public long UnseenSeqNum { get; set; }

        /// <summary>
        /// The number of messages in this mailbox.
        /// </summary>
        /// <value>The number of messages in this mailbox.</value>
        [DataMember(Name = "messages", IsRequired = true, EmitDefaultValue = true)]
        public int Messages { get; set; }

        /// <summary>
        /// The number of messages not seen since the last time the mailbox was opened.
        /// </summary>
        /// <value>The number of messages not seen since the last time the mailbox was opened.</value>
        [DataMember(Name = "recent", IsRequired = true, EmitDefaultValue = true)]
        public int Recent { get; set; }

        /// <summary>
        /// The number of unread messages.
        /// </summary>
        /// <value>The number of unread messages.</value>
        [DataMember(Name = "unseen", IsRequired = true, EmitDefaultValue = true)]
        public int Unseen { get; set; }

        /// <summary>
        /// The next UID.
        /// </summary>
        /// <value>The next UID.</value>
        [DataMember(Name = "uidNext", IsRequired = true, EmitDefaultValue = true)]
        public long UidNext { get; set; }

        /// <summary>
        /// Together with a UID, it is a unique identifier for a message. Must be greater than or equal to 1.
        /// </summary>
        /// <value>Together with a UID, it is a unique identifier for a message. Must be greater than or equal to 1.</value>
        [DataMember(Name = "uidValidity", IsRequired = true, EmitDefaultValue = true)]
        public int UidValidity { get; set; }

        /// <summary>
        /// Per-mailbox limit of message size. Set only if server supports the APPENDLIMIT extension
        /// </summary>
        /// <value>Per-mailbox limit of message size. Set only if server supports the APPENDLIMIT extension</value>
        [DataMember(Name = "appendLimit", EmitDefaultValue = true)]
        public int? AppendLimit { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapMailboxStatus {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  ReadOnly: ").Append(ReadOnly).Append("\n");
            sb.Append("  Items: ").Append(Items).Append("\n");
            sb.Append("  Flags: ").Append(Flags).Append("\n");
            sb.Append("  PermanentFlags: ").Append(PermanentFlags).Append("\n");
            sb.Append("  UnseenSeqNum: ").Append(UnseenSeqNum).Append("\n");
            sb.Append("  Messages: ").Append(Messages).Append("\n");
            sb.Append("  Recent: ").Append(Recent).Append("\n");
            sb.Append("  Unseen: ").Append(Unseen).Append("\n");
            sb.Append("  UidNext: ").Append(UidNext).Append("\n");
            sb.Append("  UidValidity: ").Append(UidValidity).Append("\n");
            sb.Append("  AppendLimit: ").Append(AppendLimit).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapMailboxStatus);
        }

        /// <summary>
        /// Returns true if ImapMailboxStatus instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapMailboxStatus to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapMailboxStatus input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.ReadOnly == input.ReadOnly ||
                    this.ReadOnly.Equals(input.ReadOnly)
                ) && 
                (
                    this.Items == input.Items ||
                    (this.Items != null &&
                    this.Items.Equals(input.Items))
                ) && 
                (
                    this.Flags == input.Flags ||
                    this.Flags != null &&
                    input.Flags != null &&
                    this.Flags.SequenceEqual(input.Flags)
                ) && 
                (
                    this.PermanentFlags == input.PermanentFlags ||
                    this.PermanentFlags != null &&
                    input.PermanentFlags != null &&
                    this.PermanentFlags.SequenceEqual(input.PermanentFlags)
                ) && 
                (
                    this.UnseenSeqNum == input.UnseenSeqNum ||
                    this.UnseenSeqNum.Equals(input.UnseenSeqNum)
                ) && 
                (
                    this.Messages == input.Messages ||
                    this.Messages.Equals(input.Messages)
                ) && 
                (
                    this.Recent == input.Recent ||
                    this.Recent.Equals(input.Recent)
                ) && 
                (
                    this.Unseen == input.Unseen ||
                    this.Unseen.Equals(input.Unseen)
                ) && 
                (
                    this.UidNext == input.UidNext ||
                    this.UidNext.Equals(input.UidNext)
                ) && 
                (
                    this.UidValidity == input.UidValidity ||
                    this.UidValidity.Equals(input.UidValidity)
                ) && 
                (
                    this.AppendLimit == input.AppendLimit ||
                    (this.AppendLimit != null &&
                    this.AppendLimit.Equals(input.AppendLimit))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ReadOnly.GetHashCode();
                if (this.Items != null)
                {
                    hashCode = (hashCode * 59) + this.Items.GetHashCode();
                }
                if (this.Flags != null)
                {
                    hashCode = (hashCode * 59) + this.Flags.GetHashCode();
                }
                if (this.PermanentFlags != null)
                {
                    hashCode = (hashCode * 59) + this.PermanentFlags.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.UnseenSeqNum.GetHashCode();
                hashCode = (hashCode * 59) + this.Messages.GetHashCode();
                hashCode = (hashCode * 59) + this.Recent.GetHashCode();
                hashCode = (hashCode * 59) + this.Unseen.GetHashCode();
                hashCode = (hashCode * 59) + this.UidNext.GetHashCode();
                hashCode = (hashCode * 59) + this.UidValidity.GetHashCode();
                if (this.AppendLimit != null)
                {
                    hashCode = (hashCode * 59) + this.AppendLimit.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapFlagOperationOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IMAP operation flags
    /// </summary>
    [DataContract(Name = "ImapFlagOperationOptions")]
    public partial class ImapFlagOperationOptions : IEquatable<ImapFlagOperationOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines FlagOperation
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FlagOperationEnum
        {
            /// <summary>
            /// Enum SETFLAGS for value: SET_FLAGS
            /// </summary>
            [EnumMember(Value = "SET_FLAGS")]
            SETFLAGS = 1,

            /// <summary>
            /// Enum ADDFLAGS for value: ADD_FLAGS
            /// </summary>
            [EnumMember(Value = "ADD_FLAGS")]
            ADDFLAGS = 2,

            /// <summary>
            /// Enum REMOVEFLAGS for value: REMOVE_FLAGS
            /// </summary>
            [EnumMember(Value = "REMOVE_FLAGS")]
            REMOVEFLAGS = 3

        }


        /// <summary>
        /// Gets or Sets FlagOperation
        /// </summary>
        [DataMember(Name = "flagOperation", IsRequired = true, EmitDefaultValue = true)]
        public FlagOperationEnum FlagOperation { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapFlagOperationOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapFlagOperationOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapFlagOperationOptions" /> class.
        /// </summary>
        /// <param name="flagOperation">flagOperation (required).</param>
        /// <param name="flags">flags (required).</param>
        public ImapFlagOperationOptions(FlagOperationEnum flagOperation = default(FlagOperationEnum), List<string> flags = default(List<string>))
        {
            this.FlagOperation = flagOperation;
            // to ensure "flags" is required (not null)
            if (flags == null)
            {
                throw new ArgumentNullException("flags is a required property for ImapFlagOperationOptions and cannot be null");
            }
            this.Flags = flags;
        }

        /// <summary>
        /// Gets or Sets Flags
        /// </summary>
        [DataMember(Name = "flags", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Flags { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapFlagOperationOptions {\n");
            sb.Append("  FlagOperation: ").Append(FlagOperation).Append("\n");
            sb.Append("  Flags: ").Append(Flags).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapFlagOperationOptions);
        }

        /// <summary>
        /// Returns true if ImapFlagOperationOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapFlagOperationOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapFlagOperationOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.FlagOperation == input.FlagOperation ||
                    this.FlagOperation.Equals(input.FlagOperation)
                ) && 
                (
                    this.Flags == input.Flags ||
                    this.Flags != null &&
                    input.Flags != null &&
                    this.Flags.SequenceEqual(input.Flags)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.FlagOperation.GetHashCode();
                if (this.Flags != null)
                {
                    hashCode = (hashCode * 59) + this.Flags.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapEmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImapEmailProjection
    /// </summary>
    [DataContract(Name = "ImapEmailProjection")]
    public partial class ImapEmailProjection : IEquatable<ImapEmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapEmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapEmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapEmailProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="read">read.</param>
        /// <param name="uid">uid (required).</param>
        /// <param name="seqNum">seqNum (required).</param>
        /// <param name="id">id (required).</param>
        public ImapEmailProjection(DateTime createdAt = default(DateTime), bool? read = default(bool?), long uid = default(long), long seqNum = default(long), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.Uid = uid;
            this.SeqNum = seqNum;
            this.Id = id;
            this.Read = read;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Read
        /// </summary>
        [DataMember(Name = "read", EmitDefaultValue = true)]
        public bool? Read { get; set; }

        /// <summary>
        /// Gets or Sets Uid
        /// </summary>
        [DataMember(Name = "uid", IsRequired = true, EmitDefaultValue = true)]
        public long Uid { get; set; }

        /// <summary>
        /// Gets or Sets SeqNum
        /// </summary>
        [DataMember(Name = "seqNum", IsRequired = true, EmitDefaultValue = true)]
        public long SeqNum { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapEmailProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  Uid: ").Append(Uid).Append("\n");
            sb.Append("  SeqNum: ").Append(SeqNum).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapEmailProjection);
        }

        /// <summary>
        /// Returns true if ImapEmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapEmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapEmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Read == input.Read ||
                    (this.Read != null &&
                    this.Read.Equals(input.Read))
                ) && 
                (
                    this.Uid == input.Uid ||
                    this.Uid.Equals(input.Uid)
                ) && 
                (
                    this.SeqNum == input.SeqNum ||
                    this.SeqNum.Equals(input.SeqNum)
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Read != null)
                {
                    hashCode = (hashCode * 59) + this.Read.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Uid.GetHashCode();
                hashCode = (hashCode * 59) + this.SeqNum.GetHashCode();
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImapAccessDetails.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Access details for inbox using IMAP
    /// </summary>
    [DataContract(Name = "ImapAccessDetails")]
    public partial class ImapAccessDetails : IEquatable<ImapAccessDetails>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapAccessDetails" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImapAccessDetails() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImapAccessDetails" /> class.
        /// </summary>
        /// <param name="secureImapServerHost">Secure TLS IMAP server host domain (required).</param>
        /// <param name="secureImapServerPort">Secure TLS IMAP server host port (required).</param>
        /// <param name="secureImapUsername">Secure TLS IMAP username for login (required).</param>
        /// <param name="secureImapPassword">Secure TLS IMAP password for login (required).</param>
        /// <param name="imapServerHost">IMAP server host domain (required).</param>
        /// <param name="imapServerPort">IMAP server host port (required).</param>
        /// <param name="imapUsername">IMAP username for login (required).</param>
        /// <param name="imapPassword">IMAP password for login (required).</param>
        /// <param name="imapMailbox">IMAP mailbox to SELECT (required).</param>
        public ImapAccessDetails(string secureImapServerHost = default(string), int secureImapServerPort = default(int), string secureImapUsername = default(string), string secureImapPassword = default(string), string imapServerHost = default(string), int imapServerPort = default(int), string imapUsername = default(string), string imapPassword = default(string), string imapMailbox = default(string))
        {
            // to ensure "secureImapServerHost" is required (not null)
            if (secureImapServerHost == null)
            {
                throw new ArgumentNullException("secureImapServerHost is a required property for ImapAccessDetails and cannot be null");
            }
            this.SecureImapServerHost = secureImapServerHost;
            this.SecureImapServerPort = secureImapServerPort;
            // to ensure "secureImapUsername" is required (not null)
            if (secureImapUsername == null)
            {
                throw new ArgumentNullException("secureImapUsername is a required property for ImapAccessDetails and cannot be null");
            }
            this.SecureImapUsername = secureImapUsername;
            // to ensure "secureImapPassword" is required (not null)
            if (secureImapPassword == null)
            {
                throw new ArgumentNullException("secureImapPassword is a required property for ImapAccessDetails and cannot be null");
            }
            this.SecureImapPassword = secureImapPassword;
            // to ensure "imapServerHost" is required (not null)
            if (imapServerHost == null)
            {
                throw new ArgumentNullException("imapServerHost is a required property for ImapAccessDetails and cannot be null");
            }
            this.ImapServerHost = imapServerHost;
            this.ImapServerPort = imapServerPort;
            // to ensure "imapUsername" is required (not null)
            if (imapUsername == null)
            {
                throw new ArgumentNullException("imapUsername is a required property for ImapAccessDetails and cannot be null");
            }
            this.ImapUsername = imapUsername;
            // to ensure "imapPassword" is required (not null)
            if (imapPassword == null)
            {
                throw new ArgumentNullException("imapPassword is a required property for ImapAccessDetails and cannot be null");
            }
            this.ImapPassword = imapPassword;
            // to ensure "imapMailbox" is required (not null)
            if (imapMailbox == null)
            {
                throw new ArgumentNullException("imapMailbox is a required property for ImapAccessDetails and cannot be null");
            }
            this.ImapMailbox = imapMailbox;
        }

        /// <summary>
        /// Secure TLS IMAP server host domain
        /// </summary>
        /// <value>Secure TLS IMAP server host domain</value>
        [DataMember(Name = "secureImapServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapServerHost { get; set; }

        /// <summary>
        /// Secure TLS IMAP server host port
        /// </summary>
        /// <value>Secure TLS IMAP server host port</value>
        [DataMember(Name = "secureImapServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int SecureImapServerPort { get; set; }

        /// <summary>
        /// Secure TLS IMAP username for login
        /// </summary>
        /// <value>Secure TLS IMAP username for login</value>
        [DataMember(Name = "secureImapUsername", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapUsername { get; set; }

        /// <summary>
        /// Secure TLS IMAP password for login
        /// </summary>
        /// <value>Secure TLS IMAP password for login</value>
        [DataMember(Name = "secureImapPassword", IsRequired = true, EmitDefaultValue = true)]
        public string SecureImapPassword { get; set; }

        /// <summary>
        /// IMAP server host domain
        /// </summary>
        /// <value>IMAP server host domain</value>
        [DataMember(Name = "imapServerHost", IsRequired = true, EmitDefaultValue = true)]
        public string ImapServerHost { get; set; }

        /// <summary>
        /// IMAP server host port
        /// </summary>
        /// <value>IMAP server host port</value>
        [DataMember(Name = "imapServerPort", IsRequired = true, EmitDefaultValue = true)]
        public int ImapServerPort { get; set; }

        /// <summary>
        /// IMAP username for login
        /// </summary>
        /// <value>IMAP username for login</value>
        [DataMember(Name = "imapUsername", IsRequired = true, EmitDefaultValue = true)]
        public string ImapUsername { get; set; }

        /// <summary>
        /// IMAP password for login
        /// </summary>
        /// <value>IMAP password for login</value>
        [DataMember(Name = "imapPassword", IsRequired = true, EmitDefaultValue = true)]
        public string ImapPassword { get; set; }

        /// <summary>
        /// IMAP mailbox to SELECT
        /// </summary>
        /// <value>IMAP mailbox to SELECT</value>
        [DataMember(Name = "imapMailbox", IsRequired = true, EmitDefaultValue = true)]
        public string ImapMailbox { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImapAccessDetails {\n");
            sb.Append("  SecureImapServerHost: ").Append(SecureImapServerHost).Append("\n");
            sb.Append("  SecureImapServerPort: ").Append(SecureImapServerPort).Append("\n");
            sb.Append("  SecureImapUsername: ").Append(SecureImapUsername).Append("\n");
            sb.Append("  SecureImapPassword: ").Append(SecureImapPassword).Append("\n");
            sb.Append("  ImapServerHost: ").Append(ImapServerHost).Append("\n");
            sb.Append("  ImapServerPort: ").Append(ImapServerPort).Append("\n");
            sb.Append("  ImapUsername: ").Append(ImapUsername).Append("\n");
            sb.Append("  ImapPassword: ").Append(ImapPassword).Append("\n");
            sb.Append("  ImapMailbox: ").Append(ImapMailbox).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImapAccessDetails);
        }

        /// <summary>
        /// Returns true if ImapAccessDetails instances are equal
        /// </summary>
        /// <param name="input">Instance of ImapAccessDetails to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImapAccessDetails input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SecureImapServerHost == input.SecureImapServerHost ||
                    (this.SecureImapServerHost != null &&
                    this.SecureImapServerHost.Equals(input.SecureImapServerHost))
                ) && 
                (
                    this.SecureImapServerPort == input.SecureImapServerPort ||
                    this.SecureImapServerPort.Equals(input.SecureImapServerPort)
                ) && 
                (
                    this.SecureImapUsername == input.SecureImapUsername ||
                    (this.SecureImapUsername != null &&
                    this.SecureImapUsername.Equals(input.SecureImapUsername))
                ) && 
                (
                    this.SecureImapPassword == input.SecureImapPassword ||
                    (this.SecureImapPassword != null &&
                    this.SecureImapPassword.Equals(input.SecureImapPassword))
                ) && 
                (
                    this.ImapServerHost == input.ImapServerHost ||
                    (this.ImapServerHost != null &&
                    this.ImapServerHost.Equals(input.ImapServerHost))
                ) && 
                (
                    this.ImapServerPort == input.ImapServerPort ||
                    this.ImapServerPort.Equals(input.ImapServerPort)
                ) && 
                (
                    this.ImapUsername == input.ImapUsername ||
                    (this.ImapUsername != null &&
                    this.ImapUsername.Equals(input.ImapUsername))
                ) && 
                (
                    this.ImapPassword == input.ImapPassword ||
                    (this.ImapPassword != null &&
                    this.ImapPassword.Equals(input.ImapPassword))
                ) && 
                (
                    this.ImapMailbox == input.ImapMailbox ||
                    (this.ImapMailbox != null &&
                    this.ImapMailbox.Equals(input.ImapMailbox))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SecureImapServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SecureImapServerPort.GetHashCode();
                if (this.SecureImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapUsername.GetHashCode();
                }
                if (this.SecureImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SecureImapPassword.GetHashCode();
                }
                if (this.ImapServerHost != null)
                {
                    hashCode = (hashCode * 59) + this.ImapServerHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ImapServerPort.GetHashCode();
                if (this.ImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.ImapUsername.GetHashCode();
                }
                if (this.ImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPassword.GetHashCode();
                }
                if (this.ImapMailbox != null)
                {
                    hashCode = (hashCode * 59) + this.ImapMailbox.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ImageIssue.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ImageIssue
    /// </summary>
    [DataContract(Name = "ImageIssue")]
    public partial class ImageIssue : IEquatable<ImageIssue>, IValidatableObject
    {
        /// <summary>
        /// Defines Severity
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SeverityEnum
        {
            /// <summary>
            /// Enum Warning for value: Warning
            /// </summary>
            [EnumMember(Value = "Warning")]
            Warning = 1,

            /// <summary>
            /// Enum Error for value: Error
            /// </summary>
            [EnumMember(Value = "Error")]
            Error = 2

        }


        /// <summary>
        /// Gets or Sets Severity
        /// </summary>
        [DataMember(Name = "severity", IsRequired = true, EmitDefaultValue = true)]
        public SeverityEnum Severity { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageIssue" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ImageIssue() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageIssue" /> class.
        /// </summary>
        /// <param name="url">url (required).</param>
        /// <param name="responseStatus">responseStatus.</param>
        /// <param name="severity">severity (required).</param>
        /// <param name="message">message (required).</param>
        public ImageIssue(string url = default(string), int responseStatus = default(int), SeverityEnum severity = default(SeverityEnum), string message = default(string))
        {
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for ImageIssue and cannot be null");
            }
            this.Url = url;
            this.Severity = severity;
            // to ensure "message" is required (not null)
            if (message == null)
            {
                throw new ArgumentNullException("message is a required property for ImageIssue and cannot be null");
            }
            this.Message = message;
            this.ResponseStatus = responseStatus;
        }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets ResponseStatus
        /// </summary>
        [DataMember(Name = "responseStatus", EmitDefaultValue = false)]
        public int ResponseStatus { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", IsRequired = true, EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ImageIssue {\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  ResponseStatus: ").Append(ResponseStatus).Append("\n");
            sb.Append("  Severity: ").Append(Severity).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ImageIssue);
        }

        /// <summary>
        /// Returns true if ImageIssue instances are equal
        /// </summary>
        /// <param name="input">Instance of ImageIssue to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ImageIssue input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.ResponseStatus == input.ResponseStatus ||
                    this.ResponseStatus.Equals(input.ResponseStatus)
                ) && 
                (
                    this.Severity == input.Severity ||
                    this.Severity.Equals(input.Severity)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ResponseStatus.GetHashCode();
                hashCode = (hashCode * 59) + this.Severity.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/IPAddressResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// IP Address look up result for a given domain / hostname
    /// </summary>
    [DataContract(Name = "IPAddressResult")]
    public partial class IPAddressResult : IEquatable<IPAddressResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="IPAddressResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected IPAddressResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="IPAddressResult" /> class.
        /// </summary>
        /// <param name="address">address (required).</param>
        /// <param name="hostname">hostname (required).</param>
        public IPAddressResult(string address = default(string), string hostname = default(string))
        {
            // to ensure "address" is required (not null)
            if (address == null)
            {
                throw new ArgumentNullException("address is a required property for IPAddressResult and cannot be null");
            }
            this.Address = address;
            // to ensure "hostname" is required (not null)
            if (hostname == null)
            {
                throw new ArgumentNullException("hostname is a required property for IPAddressResult and cannot be null");
            }
            this.Hostname = hostname;
        }

        /// <summary>
        /// Gets or Sets Address
        /// </summary>
        [DataMember(Name = "address", IsRequired = true, EmitDefaultValue = true)]
        public string Address { get; set; }

        /// <summary>
        /// Gets or Sets Hostname
        /// </summary>
        [DataMember(Name = "hostname", IsRequired = true, EmitDefaultValue = true)]
        public string Hostname { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class IPAddressResult {\n");
            sb.Append("  Address: ").Append(Address).Append("\n");
            sb.Append("  Hostname: ").Append(Hostname).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as IPAddressResult);
        }

        /// <summary>
        /// Returns true if IPAddressResult instances are equal
        /// </summary>
        /// <param name="input">Instance of IPAddressResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(IPAddressResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Address == input.Address ||
                    (this.Address != null &&
                    this.Address.Equals(input.Address))
                ) && 
                (
                    this.Hostname == input.Hostname ||
                    (this.Hostname != null &&
                    this.Hostname.Equals(input.Hostname))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Address != null)
                {
                    hashCode = (hashCode * 59) + this.Address.GetHashCode();
                }
                if (this.Hostname != null)
                {
                    hashCode = (hashCode * 59) + this.Hostname.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/HTMLValidationResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// HTML Validation Results
    /// </summary>
    [DataContract(Name = "HTMLValidationResult")]
    public partial class HTMLValidationResult : IEquatable<HTMLValidationResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="HTMLValidationResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected HTMLValidationResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="HTMLValidationResult" /> class.
        /// </summary>
        /// <param name="isValid">Is HTML validation result valid (required).</param>
        /// <param name="infos">Optional infos resulting from HTML validation (required).</param>
        /// <param name="errors">Optional errors resulting from HTML validation (required).</param>
        /// <param name="warnings">Optional warnings resulting from HTML validation (required).</param>
        public HTMLValidationResult(bool isValid = default(bool), List<ValidationMessage> infos = default(List<ValidationMessage>), List<ValidationMessage> errors = default(List<ValidationMessage>), List<ValidationMessage> warnings = default(List<ValidationMessage>))
        {
            this.IsValid = isValid;
            // to ensure "infos" is required (not null)
            if (infos == null)
            {
                throw new ArgumentNullException("infos is a required property for HTMLValidationResult and cannot be null");
            }
            this.Infos = infos;
            // to ensure "errors" is required (not null)
            if (errors == null)
            {
                throw new ArgumentNullException("errors is a required property for HTMLValidationResult and cannot be null");
            }
            this.Errors = errors;
            // to ensure "warnings" is required (not null)
            if (warnings == null)
            {
                throw new ArgumentNullException("warnings is a required property for HTMLValidationResult and cannot be null");
            }
            this.Warnings = warnings;
        }

        /// <summary>
        /// Is HTML validation result valid
        /// </summary>
        /// <value>Is HTML validation result valid</value>
        [DataMember(Name = "isValid", IsRequired = true, EmitDefaultValue = true)]
        public bool IsValid { get; set; }

        /// <summary>
        /// Optional infos resulting from HTML validation
        /// </summary>
        /// <value>Optional infos resulting from HTML validation</value>
        [DataMember(Name = "infos", IsRequired = true, EmitDefaultValue = true)]
        public List<ValidationMessage> Infos { get; set; }

        /// <summary>
        /// Optional errors resulting from HTML validation
        /// </summary>
        /// <value>Optional errors resulting from HTML validation</value>
        [DataMember(Name = "errors", IsRequired = true, EmitDefaultValue = true)]
        public List<ValidationMessage> Errors { get; set; }

        /// <summary>
        /// Optional warnings resulting from HTML validation
        /// </summary>
        /// <value>Optional warnings resulting from HTML validation</value>
        [DataMember(Name = "warnings", IsRequired = true, EmitDefaultValue = true)]
        public List<ValidationMessage> Warnings { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class HTMLValidationResult {\n");
            sb.Append("  IsValid: ").Append(IsValid).Append("\n");
            sb.Append("  Infos: ").Append(Infos).Append("\n");
            sb.Append("  Errors: ").Append(Errors).Append("\n");
            sb.Append("  Warnings: ").Append(Warnings).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as HTMLValidationResult);
        }

        /// <summary>
        /// Returns true if HTMLValidationResult instances are equal
        /// </summary>
        /// <param name="input">Instance of HTMLValidationResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(HTMLValidationResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.IsValid == input.IsValid ||
                    this.IsValid.Equals(input.IsValid)
                ) && 
                (
                    this.Infos == input.Infos ||
                    this.Infos != null &&
                    input.Infos != null &&
                    this.Infos.SequenceEqual(input.Infos)
                ) && 
                (
                    this.Errors == input.Errors ||
                    this.Errors != null &&
                    input.Errors != null &&
                    this.Errors.SequenceEqual(input.Errors)
                ) && 
                (
                    this.Warnings == input.Warnings ||
                    this.Warnings != null &&
                    input.Warnings != null &&
                    this.Warnings.SequenceEqual(input.Warnings)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.IsValid.GetHashCode();
                if (this.Infos != null)
                {
                    hashCode = (hashCode * 59) + this.Infos.GetHashCode();
                }
                if (this.Errors != null)
                {
                    hashCode = (hashCode * 59) + this.Errors.GetHashCode();
                }
                if (this.Warnings != null)
                {
                    hashCode = (hashCode * 59) + this.Warnings.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GroupProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Data for contact group
    /// </summary>
    [DataContract(Name = "GroupProjection")]
    public partial class GroupProjection : IEquatable<GroupProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GroupProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="name">name (required).</param>
        /// <param name="id">id (required).</param>
        /// <param name="description">description.</param>
        public GroupProjection(DateTime createdAt = default(DateTime), string name = default(string), Guid id = default(Guid), string description = default(string))
        {
            this.CreatedAt = createdAt;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GroupProjection and cannot be null");
            }
            this.Name = name;
            this.Id = id;
            this.Description = description;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Description
        /// </summary>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GroupProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GroupProjection);
        }

        /// <summary>
        /// Returns true if GroupProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of GroupProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GroupProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GroupDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Contact group data
    /// </summary>
    [DataContract(Name = "GroupDto")]
    public partial class GroupDto : IEquatable<GroupDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GroupDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="name">name (required).</param>
        /// <param name="description">description.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public GroupDto(Guid id = default(Guid), string name = default(string), string description = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GroupDto and cannot be null");
            }
            this.Name = name;
            this.CreatedAt = createdAt;
            this.Description = description;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Description
        /// </summary>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GroupDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GroupDto);
        }

        /// <summary>
        /// Returns true if GroupDto instances are equal
        /// </summary>
        /// <param name="input">Instance of GroupDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GroupDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GroupContactsDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Describes contacts attached to a contact group
    /// </summary>
    [DataContract(Name = "GroupContactsDto")]
    public partial class GroupContactsDto : IEquatable<GroupContactsDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupContactsDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GroupContactsDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupContactsDto" /> class.
        /// </summary>
        /// <param name="group">group (required).</param>
        /// <param name="contacts">contacts (required).</param>
        public GroupContactsDto(GroupDto group = default(GroupDto), List<ContactDto> contacts = default(List<ContactDto>))
        {
            // to ensure "group" is required (not null)
            if (group == null)
            {
                throw new ArgumentNullException("group is a required property for GroupContactsDto and cannot be null");
            }
            this.Group = group;
            // to ensure "contacts" is required (not null)
            if (contacts == null)
            {
                throw new ArgumentNullException("contacts is a required property for GroupContactsDto and cannot be null");
            }
            this.Contacts = contacts;
        }

        /// <summary>
        /// Gets or Sets Group
        /// </summary>
        [DataMember(Name = "group", IsRequired = true, EmitDefaultValue = true)]
        public GroupDto Group { get; set; }

        /// <summary>
        /// Gets or Sets Contacts
        /// </summary>
        [DataMember(Name = "contacts", IsRequired = true, EmitDefaultValue = true)]
        public List<ContactDto> Contacts { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GroupContactsDto {\n");
            sb.Append("  Group: ").Append(Group).Append("\n");
            sb.Append("  Contacts: ").Append(Contacts).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GroupContactsDto);
        }

        /// <summary>
        /// Returns true if GroupContactsDto instances are equal
        /// </summary>
        /// <param name="input">Instance of GroupContactsDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GroupContactsDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Group == input.Group ||
                    (this.Group != null &&
                    this.Group.Equals(input.Group))
                ) && 
                (
                    this.Contacts == input.Contacts ||
                    this.Contacts != null &&
                    input.Contacts != null &&
                    this.Contacts.SequenceEqual(input.Contacts)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Group != null)
                {
                    hashCode = (hashCode * 59) + this.Group.GetHashCode();
                }
                if (this.Contacts != null)
                {
                    hashCode = (hashCode * 59) + this.Contacts.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GravatarUrl.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// User image
    /// </summary>
    [DataContract(Name = "GravatarUrl")]
    public partial class GravatarUrl : IEquatable<GravatarUrl>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GravatarUrl" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GravatarUrl() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GravatarUrl" /> class.
        /// </summary>
        /// <param name="url">url (required).</param>
        /// <param name="hash">hash (required).</param>
        public GravatarUrl(string url = default(string), string hash = default(string))
        {
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for GravatarUrl and cannot be null");
            }
            this.Url = url;
            // to ensure "hash" is required (not null)
            if (hash == null)
            {
                throw new ArgumentNullException("hash is a required property for GravatarUrl and cannot be null");
            }
            this.Hash = hash;
        }

        /// <summary>
        /// Gets or Sets Url
        /// </summary>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets Hash
        /// </summary>
        [DataMember(Name = "hash", IsRequired = true, EmitDefaultValue = true)]
        public string Hash { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GravatarUrl {\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  Hash: ").Append(Hash).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GravatarUrl);
        }

        /// <summary>
        /// Returns true if GravatarUrl instances are equal
        /// </summary>
        /// <param name="input">Instance of GravatarUrl to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GravatarUrl input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.Hash == input.Hash ||
                    (this.Hash != null &&
                    this.Hash.Equals(input.Hash))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                if (this.Hash != null)
                {
                    hashCode = (hashCode * 59) + this.Hash.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GetEmailScreenshotOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options taking a screenshot capture of a rendered email
    /// </summary>
    [DataContract(Name = "GetEmailScreenshotOptions")]
    public partial class GetEmailScreenshotOptions : IEquatable<GetEmailScreenshotOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetEmailScreenshotOptions" /> class.
        /// </summary>
        /// <param name="height">Window height in pixels.</param>
        /// <param name="width">Window width in pixels.</param>
        public GetEmailScreenshotOptions(int? height = default(int?), int? width = default(int?))
        {
            this.Height = height;
            this.Width = width;
        }

        /// <summary>
        /// Window height in pixels
        /// </summary>
        /// <value>Window height in pixels</value>
        [DataMember(Name = "height", EmitDefaultValue = true)]
        public int? Height { get; set; }

        /// <summary>
        /// Window width in pixels
        /// </summary>
        /// <value>Window width in pixels</value>
        [DataMember(Name = "width", EmitDefaultValue = true)]
        public int? Width { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GetEmailScreenshotOptions {\n");
            sb.Append("  Height: ").Append(Height).Append("\n");
            sb.Append("  Width: ").Append(Width).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GetEmailScreenshotOptions);
        }

        /// <summary>
        /// Returns true if GetEmailScreenshotOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of GetEmailScreenshotOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GetEmailScreenshotOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Height == input.Height ||
                    (this.Height != null &&
                    this.Height.Equals(input.Height))
                ) && 
                (
                    this.Width == input.Width ||
                    (this.Width != null &&
                    this.Width.Equals(input.Width))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Height != null)
                {
                    hashCode = (hashCode * 59) + this.Height.GetHashCode();
                }
                if (this.Width != null)
                {
                    hashCode = (hashCode * 59) + this.Width.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateTlsReportingRecordResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateTlsReportingRecordResults
    /// </summary>
    [DataContract(Name = "GenerateTlsReportingRecordResults")]
    public partial class GenerateTlsReportingRecordResults : IEquatable<GenerateTlsReportingRecordResults>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "type", IsRequired = true, EmitDefaultValue = true)]
        public TypeEnum Type { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateTlsReportingRecordResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateTlsReportingRecordResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateTlsReportingRecordResults" /> class.
        /// </summary>
        /// <param name="name">name (required).</param>
        /// <param name="type">Domain Name Server Record Types (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="value">value (required).</param>
        public GenerateTlsReportingRecordResults(string name = default(string), TypeEnum type = default(TypeEnum), int ttl = default(int), string value = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GenerateTlsReportingRecordResults and cannot be null");
            }
            this.Name = name;
            this.Type = type;
            this.Ttl = ttl;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for GenerateTlsReportingRecordResults and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateTlsReportingRecordResults {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateTlsReportingRecordResults);
        }

        /// <summary>
        /// Returns true if GenerateTlsReportingRecordResults instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateTlsReportingRecordResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateTlsReportingRecordResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Type == input.Type ||
                    this.Type.Equals(input.Type)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Type.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateTlsReportingRecordOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateTlsReportingRecordOptions
    /// </summary>
    [DataContract(Name = "GenerateTlsReportingRecordOptions")]
    public partial class GenerateTlsReportingRecordOptions : IEquatable<GenerateTlsReportingRecordOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines _Version
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum VersionEnum
        {
            /// <summary>
            /// Enum TLSRPTv1 for value: TLSRPTv1
            /// </summary>
            [EnumMember(Value = "TLSRPTv1")]
            TLSRPTv1 = 1

        }


        /// <summary>
        /// Gets or Sets _Version
        /// </summary>
        [DataMember(Name = "version", IsRequired = true, EmitDefaultValue = true)]
        public VersionEnum _Version { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateTlsReportingRecordOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateTlsReportingRecordOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateTlsReportingRecordOptions" /> class.
        /// </summary>
        /// <param name="reportingAddresses">reportingAddresses (required).</param>
        /// <param name="reportingUrl">reportingUrl.</param>
        /// <param name="host">host (required).</param>
        /// <param name="version">version (required).</param>
        /// <param name="ttl">ttl (required).</param>
        public GenerateTlsReportingRecordOptions(List<string> reportingAddresses = default(List<string>), string reportingUrl = default(string), string host = default(string), VersionEnum version = default(VersionEnum), int ttl = default(int))
        {
            // to ensure "reportingAddresses" is required (not null)
            if (reportingAddresses == null)
            {
                throw new ArgumentNullException("reportingAddresses is a required property for GenerateTlsReportingRecordOptions and cannot be null");
            }
            this.ReportingAddresses = reportingAddresses;
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for GenerateTlsReportingRecordOptions and cannot be null");
            }
            this.Host = host;
            this._Version = version;
            this.Ttl = ttl;
            this.ReportingUrl = reportingUrl;
        }

        /// <summary>
        /// Gets or Sets ReportingAddresses
        /// </summary>
        [DataMember(Name = "reportingAddresses", IsRequired = true, EmitDefaultValue = true)]
        public List<string> ReportingAddresses { get; set; }

        /// <summary>
        /// Gets or Sets ReportingUrl
        /// </summary>
        [DataMember(Name = "reportingUrl", EmitDefaultValue = false)]
        public string ReportingUrl { get; set; }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateTlsReportingRecordOptions {\n");
            sb.Append("  ReportingAddresses: ").Append(ReportingAddresses).Append("\n");
            sb.Append("  ReportingUrl: ").Append(ReportingUrl).Append("\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("  _Version: ").Append(_Version).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateTlsReportingRecordOptions);
        }

        /// <summary>
        /// Returns true if GenerateTlsReportingRecordOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateTlsReportingRecordOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateTlsReportingRecordOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ReportingAddresses == input.ReportingAddresses ||
                    this.ReportingAddresses != null &&
                    input.ReportingAddresses != null &&
                    this.ReportingAddresses.SequenceEqual(input.ReportingAddresses)
                ) && 
                (
                    this.ReportingUrl == input.ReportingUrl ||
                    (this.ReportingUrl != null &&
                    this.ReportingUrl.Equals(input.ReportingUrl))
                ) && 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                ) && 
                (
                    this._Version == input._Version ||
                    this._Version.Equals(input._Version)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ReportingAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.ReportingAddresses.GetHashCode();
                }
                if (this.ReportingUrl != null)
                {
                    hashCode = (hashCode * 59) + this.ReportingUrl.GetHashCode();
                }
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                hashCode = (hashCode * 59) + this._Version.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateMtaStsRecordResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateMtaStsRecordResults
    /// </summary>
    [DataContract(Name = "GenerateMtaStsRecordResults")]
    public partial class GenerateMtaStsRecordResults : IEquatable<GenerateMtaStsRecordResults>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "type", IsRequired = true, EmitDefaultValue = true)]
        public TypeEnum Type { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateMtaStsRecordResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateMtaStsRecordResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateMtaStsRecordResults" /> class.
        /// </summary>
        /// <param name="name">name (required).</param>
        /// <param name="type">Domain Name Server Record Types (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="value">value (required).</param>
        /// <param name="wellKnownValue">wellKnownValue (required).</param>
        /// <param name="wellKnownUrl">wellKnownUrl (required).</param>
        public GenerateMtaStsRecordResults(string name = default(string), TypeEnum type = default(TypeEnum), int ttl = default(int), string value = default(string), string wellKnownValue = default(string), string wellKnownUrl = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GenerateMtaStsRecordResults and cannot be null");
            }
            this.Name = name;
            this.Type = type;
            this.Ttl = ttl;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for GenerateMtaStsRecordResults and cannot be null");
            }
            this.Value = value;
            // to ensure "wellKnownValue" is required (not null)
            if (wellKnownValue == null)
            {
                throw new ArgumentNullException("wellKnownValue is a required property for GenerateMtaStsRecordResults and cannot be null");
            }
            this.WellKnownValue = wellKnownValue;
            // to ensure "wellKnownUrl" is required (not null)
            if (wellKnownUrl == null)
            {
                throw new ArgumentNullException("wellKnownUrl is a required property for GenerateMtaStsRecordResults and cannot be null");
            }
            this.WellKnownUrl = wellKnownUrl;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Gets or Sets WellKnownValue
        /// </summary>
        [DataMember(Name = "wellKnownValue", IsRequired = true, EmitDefaultValue = true)]
        public string WellKnownValue { get; set; }

        /// <summary>
        /// Gets or Sets WellKnownUrl
        /// </summary>
        [DataMember(Name = "wellKnownUrl", IsRequired = true, EmitDefaultValue = true)]
        public string WellKnownUrl { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateMtaStsRecordResults {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("  WellKnownValue: ").Append(WellKnownValue).Append("\n");
            sb.Append("  WellKnownUrl: ").Append(WellKnownUrl).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateMtaStsRecordResults);
        }

        /// <summary>
        /// Returns true if GenerateMtaStsRecordResults instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateMtaStsRecordResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateMtaStsRecordResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Type == input.Type ||
                    this.Type.Equals(input.Type)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                ) && 
                (
                    this.WellKnownValue == input.WellKnownValue ||
                    (this.WellKnownValue != null &&
                    this.WellKnownValue.Equals(input.WellKnownValue))
                ) && 
                (
                    this.WellKnownUrl == input.WellKnownUrl ||
                    (this.WellKnownUrl != null &&
                    this.WellKnownUrl.Equals(input.WellKnownUrl))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Type.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                if (this.WellKnownValue != null)
                {
                    hashCode = (hashCode * 59) + this.WellKnownValue.GetHashCode();
                }
                if (this.WellKnownUrl != null)
                {
                    hashCode = (hashCode * 59) + this.WellKnownUrl.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateMtaStsRecordOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateMtaStsRecordOptions
    /// </summary>
    [DataContract(Name = "GenerateMtaStsRecordOptions")]
    public partial class GenerateMtaStsRecordOptions : IEquatable<GenerateMtaStsRecordOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines _Version
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum VersionEnum
        {
            /// <summary>
            /// Enum STSv1 for value: STSv1
            /// </summary>
            [EnumMember(Value = "STSv1")]
            STSv1 = 1

        }


        /// <summary>
        /// Gets or Sets _Version
        /// </summary>
        [DataMember(Name = "version", IsRequired = true, EmitDefaultValue = true)]
        public VersionEnum _Version { get; set; }
        /// <summary>
        /// Defines Mode
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ModeEnum
        {
            /// <summary>
            /// Enum TESTING for value: TESTING
            /// </summary>
            [EnumMember(Value = "TESTING")]
            TESTING = 1,

            /// <summary>
            /// Enum ENFORCE for value: ENFORCE
            /// </summary>
            [EnumMember(Value = "ENFORCE")]
            ENFORCE = 2,

            /// <summary>
            /// Enum NONE for value: NONE
            /// </summary>
            [EnumMember(Value = "NONE")]
            NONE = 3

        }


        /// <summary>
        /// Gets or Sets Mode
        /// </summary>
        [DataMember(Name = "mode", IsRequired = true, EmitDefaultValue = true)]
        public ModeEnum Mode { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateMtaStsRecordOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateMtaStsRecordOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateMtaStsRecordOptions" /> class.
        /// </summary>
        /// <param name="host">host (required).</param>
        /// <param name="version">version (required).</param>
        /// <param name="mode">mode (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="maxAgeSeconds">maxAgeSeconds (required).</param>
        /// <param name="mxRecords">mxRecords (required).</param>
        public GenerateMtaStsRecordOptions(string host = default(string), VersionEnum version = default(VersionEnum), ModeEnum mode = default(ModeEnum), int ttl = default(int), int maxAgeSeconds = default(int), List<string> mxRecords = default(List<string>))
        {
            // to ensure "host" is required (not null)
            if (host == null)
            {
                throw new ArgumentNullException("host is a required property for GenerateMtaStsRecordOptions and cannot be null");
            }
            this.Host = host;
            this._Version = version;
            this.Mode = mode;
            this.Ttl = ttl;
            this.MaxAgeSeconds = maxAgeSeconds;
            // to ensure "mxRecords" is required (not null)
            if (mxRecords == null)
            {
                throw new ArgumentNullException("mxRecords is a required property for GenerateMtaStsRecordOptions and cannot be null");
            }
            this.MxRecords = mxRecords;
        }

        /// <summary>
        /// Gets or Sets Host
        /// </summary>
        [DataMember(Name = "host", IsRequired = true, EmitDefaultValue = true)]
        public string Host { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Gets or Sets MaxAgeSeconds
        /// </summary>
        [DataMember(Name = "maxAgeSeconds", IsRequired = true, EmitDefaultValue = true)]
        public int MaxAgeSeconds { get; set; }

        /// <summary>
        /// Gets or Sets MxRecords
        /// </summary>
        [DataMember(Name = "mxRecords", IsRequired = true, EmitDefaultValue = true)]
        public List<string> MxRecords { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateMtaStsRecordOptions {\n");
            sb.Append("  Host: ").Append(Host).Append("\n");
            sb.Append("  _Version: ").Append(_Version).Append("\n");
            sb.Append("  Mode: ").Append(Mode).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  MaxAgeSeconds: ").Append(MaxAgeSeconds).Append("\n");
            sb.Append("  MxRecords: ").Append(MxRecords).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateMtaStsRecordOptions);
        }

        /// <summary>
        /// Returns true if GenerateMtaStsRecordOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateMtaStsRecordOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateMtaStsRecordOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Host == input.Host ||
                    (this.Host != null &&
                    this.Host.Equals(input.Host))
                ) && 
                (
                    this._Version == input._Version ||
                    this._Version.Equals(input._Version)
                ) && 
                (
                    this.Mode == input.Mode ||
                    this.Mode.Equals(input.Mode)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.MaxAgeSeconds == input.MaxAgeSeconds ||
                    this.MaxAgeSeconds.Equals(input.MaxAgeSeconds)
                ) && 
                (
                    this.MxRecords == input.MxRecords ||
                    this.MxRecords != null &&
                    input.MxRecords != null &&
                    this.MxRecords.SequenceEqual(input.MxRecords)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Host != null)
                {
                    hashCode = (hashCode * 59) + this.Host.GetHashCode();
                }
                hashCode = (hashCode * 59) + this._Version.GetHashCode();
                hashCode = (hashCode * 59) + this.Mode.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                hashCode = (hashCode * 59) + this.MaxAgeSeconds.GetHashCode();
                if (this.MxRecords != null)
                {
                    hashCode = (hashCode * 59) + this.MxRecords.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateDmarcRecordResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateDmarcRecordResults
    /// </summary>
    [DataContract(Name = "GenerateDmarcRecordResults")]
    public partial class GenerateDmarcRecordResults : IEquatable<GenerateDmarcRecordResults>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "type", IsRequired = true, EmitDefaultValue = true)]
        public TypeEnum Type { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateDmarcRecordResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateDmarcRecordResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateDmarcRecordResults" /> class.
        /// </summary>
        /// <param name="name">name (required).</param>
        /// <param name="type">Domain Name Server Record Types (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="value">value (required).</param>
        public GenerateDmarcRecordResults(string name = default(string), TypeEnum type = default(TypeEnum), int ttl = default(int), string value = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GenerateDmarcRecordResults and cannot be null");
            }
            this.Name = name;
            this.Type = type;
            this.Ttl = ttl;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for GenerateDmarcRecordResults and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateDmarcRecordResults {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateDmarcRecordResults);
        }

        /// <summary>
        /// Returns true if GenerateDmarcRecordResults instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateDmarcRecordResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateDmarcRecordResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Type == input.Type ||
                    this.Type.Equals(input.Type)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Type.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateDmarcRecordOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateDmarcRecordOptions
    /// </summary>
    [DataContract(Name = "GenerateDmarcRecordOptions")]
    public partial class GenerateDmarcRecordOptions : IEquatable<GenerateDmarcRecordOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines _Version
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum VersionEnum
        {
            /// <summary>
            /// Enum DMARC1 for value: DMARC1
            /// </summary>
            [EnumMember(Value = "DMARC1")]
            DMARC1 = 1

        }


        /// <summary>
        /// Gets or Sets _Version
        /// </summary>
        [DataMember(Name = "version", IsRequired = true, EmitDefaultValue = true)]
        public VersionEnum _Version { get; set; }
        /// <summary>
        /// Defines Policy
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PolicyEnum
        {
            /// <summary>
            /// Enum NONE for value: NONE
            /// </summary>
            [EnumMember(Value = "NONE")]
            NONE = 1,

            /// <summary>
            /// Enum QUARANTINE for value: QUARANTINE
            /// </summary>
            [EnumMember(Value = "QUARANTINE")]
            QUARANTINE = 2,

            /// <summary>
            /// Enum REJECT for value: REJECT
            /// </summary>
            [EnumMember(Value = "REJECT")]
            REJECT = 3

        }


        /// <summary>
        /// Gets or Sets Policy
        /// </summary>
        [DataMember(Name = "policy", IsRequired = true, EmitDefaultValue = true)]
        public PolicyEnum Policy { get; set; }
        /// <summary>
        /// Defines SubdomainPolicy
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SubdomainPolicyEnum
        {
            /// <summary>
            /// Enum NONE for value: NONE
            /// </summary>
            [EnumMember(Value = "NONE")]
            NONE = 1,

            /// <summary>
            /// Enum QUARANTINE for value: QUARANTINE
            /// </summary>
            [EnumMember(Value = "QUARANTINE")]
            QUARANTINE = 2,

            /// <summary>
            /// Enum REJECT for value: REJECT
            /// </summary>
            [EnumMember(Value = "REJECT")]
            REJECT = 3

        }


        /// <summary>
        /// Gets or Sets SubdomainPolicy
        /// </summary>
        [DataMember(Name = "subdomainPolicy", EmitDefaultValue = false)]
        public SubdomainPolicyEnum? SubdomainPolicy { get; set; }
        /// <summary>
        /// Defines ReportFormat
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ReportFormatEnum
        {
            /// <summary>
            /// Enum AFRF for value: AFRF
            /// </summary>
            [EnumMember(Value = "AFRF")]
            AFRF = 1

        }


        /// <summary>
        /// Gets or Sets ReportFormat
        /// </summary>
        [DataMember(Name = "reportFormat", EmitDefaultValue = false)]
        public ReportFormatEnum? ReportFormat { get; set; }
        /// <summary>
        /// Defines Adkim
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AdkimEnum
        {
            /// <summary>
            /// Enum STRICT for value: STRICT
            /// </summary>
            [EnumMember(Value = "STRICT")]
            STRICT = 1,

            /// <summary>
            /// Enum RELAXED for value: RELAXED
            /// </summary>
            [EnumMember(Value = "RELAXED")]
            RELAXED = 2

        }


        /// <summary>
        /// Gets or Sets Adkim
        /// </summary>
        [DataMember(Name = "adkim", EmitDefaultValue = false)]
        public AdkimEnum? Adkim { get; set; }
        /// <summary>
        /// Defines Aspf
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AspfEnum
        {
            /// <summary>
            /// Enum STRICT for value: STRICT
            /// </summary>
            [EnumMember(Value = "STRICT")]
            STRICT = 1,

            /// <summary>
            /// Enum RELAXED for value: RELAXED
            /// </summary>
            [EnumMember(Value = "RELAXED")]
            RELAXED = 2

        }


        /// <summary>
        /// Gets or Sets Aspf
        /// </summary>
        [DataMember(Name = "aspf", EmitDefaultValue = false)]
        public AspfEnum? Aspf { get; set; }
        /// <summary>
        /// Defines Fo
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FoEnum
        {
            /// <summary>
            /// Enum _0 for value: FO_0
            /// </summary>
            [EnumMember(Value = "FO_0")]
            _0 = 1,

            /// <summary>
            /// Enum _1 for value: FO_1
            /// </summary>
            [EnumMember(Value = "FO_1")]
            _1 = 2,

            /// <summary>
            /// Enum D for value: FO_D
            /// </summary>
            [EnumMember(Value = "FO_D")]
            D = 3,

            /// <summary>
            /// Enum S for value: FO_S
            /// </summary>
            [EnumMember(Value = "FO_S")]
            S = 4

        }


        /// <summary>
        /// Gets or Sets Fo
        /// </summary>
        [DataMember(Name = "fo", EmitDefaultValue = false)]
        public FoEnum? Fo { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateDmarcRecordOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateDmarcRecordOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateDmarcRecordOptions" /> class.
        /// </summary>
        /// <param name="domain">domain (required).</param>
        /// <param name="version">version (required).</param>
        /// <param name="policy">policy (required).</param>
        /// <param name="subdomainPolicy">subdomainPolicy.</param>
        /// <param name="reportEmailAddress">reportEmailAddress.</param>
        /// <param name="forensicEmailAddress">forensicEmailAddress.</param>
        /// <param name="percentage">percentage.</param>
        /// <param name="reportFormat">reportFormat.</param>
        /// <param name="secondsBetweenReports">secondsBetweenReports.</param>
        /// <param name="adkim">adkim.</param>
        /// <param name="aspf">aspf.</param>
        /// <param name="fo">fo.</param>
        public GenerateDmarcRecordOptions(string domain = default(string), VersionEnum version = default(VersionEnum), PolicyEnum policy = default(PolicyEnum), SubdomainPolicyEnum? subdomainPolicy = default(SubdomainPolicyEnum?), List<string> reportEmailAddress = default(List<string>), List<string> forensicEmailAddress = default(List<string>), int percentage = default(int), ReportFormatEnum? reportFormat = default(ReportFormatEnum?), int secondsBetweenReports = default(int), AdkimEnum? adkim = default(AdkimEnum?), AspfEnum? aspf = default(AspfEnum?), FoEnum? fo = default(FoEnum?))
        {
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for GenerateDmarcRecordOptions and cannot be null");
            }
            this.Domain = domain;
            this._Version = version;
            this.Policy = policy;
            this.SubdomainPolicy = subdomainPolicy;
            this.ReportEmailAddress = reportEmailAddress;
            this.ForensicEmailAddress = forensicEmailAddress;
            this.Percentage = percentage;
            this.ReportFormat = reportFormat;
            this.SecondsBetweenReports = secondsBetweenReports;
            this.Adkim = adkim;
            this.Aspf = aspf;
            this.Fo = fo;
        }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Gets or Sets ReportEmailAddress
        /// </summary>
        [DataMember(Name = "reportEmailAddress", EmitDefaultValue = false)]
        public List<string> ReportEmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets ForensicEmailAddress
        /// </summary>
        [DataMember(Name = "forensicEmailAddress", EmitDefaultValue = false)]
        public List<string> ForensicEmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Percentage
        /// </summary>
        [DataMember(Name = "percentage", EmitDefaultValue = false)]
        public int Percentage { get; set; }

        /// <summary>
        /// Gets or Sets SecondsBetweenReports
        /// </summary>
        [DataMember(Name = "secondsBetweenReports", EmitDefaultValue = false)]
        public int SecondsBetweenReports { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateDmarcRecordOptions {\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  _Version: ").Append(_Version).Append("\n");
            sb.Append("  Policy: ").Append(Policy).Append("\n");
            sb.Append("  SubdomainPolicy: ").Append(SubdomainPolicy).Append("\n");
            sb.Append("  ReportEmailAddress: ").Append(ReportEmailAddress).Append("\n");
            sb.Append("  ForensicEmailAddress: ").Append(ForensicEmailAddress).Append("\n");
            sb.Append("  Percentage: ").Append(Percentage).Append("\n");
            sb.Append("  ReportFormat: ").Append(ReportFormat).Append("\n");
            sb.Append("  SecondsBetweenReports: ").Append(SecondsBetweenReports).Append("\n");
            sb.Append("  Adkim: ").Append(Adkim).Append("\n");
            sb.Append("  Aspf: ").Append(Aspf).Append("\n");
            sb.Append("  Fo: ").Append(Fo).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateDmarcRecordOptions);
        }

        /// <summary>
        /// Returns true if GenerateDmarcRecordOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateDmarcRecordOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateDmarcRecordOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this._Version == input._Version ||
                    this._Version.Equals(input._Version)
                ) && 
                (
                    this.Policy == input.Policy ||
                    this.Policy.Equals(input.Policy)
                ) && 
                (
                    this.SubdomainPolicy == input.SubdomainPolicy ||
                    this.SubdomainPolicy.Equals(input.SubdomainPolicy)
                ) && 
                (
                    this.ReportEmailAddress == input.ReportEmailAddress ||
                    this.ReportEmailAddress != null &&
                    input.ReportEmailAddress != null &&
                    this.ReportEmailAddress.SequenceEqual(input.ReportEmailAddress)
                ) && 
                (
                    this.ForensicEmailAddress == input.ForensicEmailAddress ||
                    this.ForensicEmailAddress != null &&
                    input.ForensicEmailAddress != null &&
                    this.ForensicEmailAddress.SequenceEqual(input.ForensicEmailAddress)
                ) && 
                (
                    this.Percentage == input.Percentage ||
                    this.Percentage.Equals(input.Percentage)
                ) && 
                (
                    this.ReportFormat == input.ReportFormat ||
                    this.ReportFormat.Equals(input.ReportFormat)
                ) && 
                (
                    this.SecondsBetweenReports == input.SecondsBetweenReports ||
                    this.SecondsBetweenReports.Equals(input.SecondsBetweenReports)
                ) && 
                (
                    this.Adkim == input.Adkim ||
                    this.Adkim.Equals(input.Adkim)
                ) && 
                (
                    this.Aspf == input.Aspf ||
                    this.Aspf.Equals(input.Aspf)
                ) && 
                (
                    this.Fo == input.Fo ||
                    this.Fo.Equals(input.Fo)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                hashCode = (hashCode * 59) + this._Version.GetHashCode();
                hashCode = (hashCode * 59) + this.Policy.GetHashCode();
                hashCode = (hashCode * 59) + this.SubdomainPolicy.GetHashCode();
                if (this.ReportEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.ReportEmailAddress.GetHashCode();
                }
                if (this.ForensicEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.ForensicEmailAddress.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Percentage.GetHashCode();
                hashCode = (hashCode * 59) + this.ReportFormat.GetHashCode();
                hashCode = (hashCode * 59) + this.SecondsBetweenReports.GetHashCode();
                hashCode = (hashCode * 59) + this.Adkim.GetHashCode();
                hashCode = (hashCode * 59) + this.Aspf.GetHashCode();
                hashCode = (hashCode * 59) + this.Fo.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            // Percentage (int) maximum
            if (this.Percentage > (int)100)
            {
                yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Percentage, must be a value less than or equal to 100.", new [] { "Percentage" });
            }

            // Percentage (int) minimum
            if (this.Percentage < (int)1)
            {
                yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Percentage, must be a value greater than or equal to 1.", new [] { "Percentage" });
            }

            yield break;
        }
    }

}

src/mailslurp/Model/GenerateBimiRecordResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateBimiRecordResults
    /// </summary>
    [DataContract(Name = "GenerateBimiRecordResults")]
    public partial class GenerateBimiRecordResults : IEquatable<GenerateBimiRecordResults>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "type", IsRequired = true, EmitDefaultValue = true)]
        public TypeEnum Type { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateBimiRecordResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateBimiRecordResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateBimiRecordResults" /> class.
        /// </summary>
        /// <param name="name">name (required).</param>
        /// <param name="type">Domain Name Server Record Types (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="value">value (required).</param>
        public GenerateBimiRecordResults(string name = default(string), TypeEnum type = default(TypeEnum), int ttl = default(int), string value = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for GenerateBimiRecordResults and cannot be null");
            }
            this.Name = name;
            this.Type = type;
            this.Ttl = ttl;
            // to ensure "value" is required (not null)
            if (value == null)
            {
                throw new ArgumentNullException("value is a required property for GenerateBimiRecordResults and cannot be null");
            }
            this.Value = value;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public int Ttl { get; set; }

        /// <summary>
        /// Gets or Sets Value
        /// </summary>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public string Value { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateBimiRecordResults {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateBimiRecordResults);
        }

        /// <summary>
        /// Returns true if GenerateBimiRecordResults instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateBimiRecordResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateBimiRecordResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Type == input.Type ||
                    this.Type.Equals(input.Type)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.Value == input.Value ||
                    (this.Value != null &&
                    this.Value.Equals(input.Value))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Type.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.Value != null)
                {
                    hashCode = (hashCode * 59) + this.Value.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/GenerateBimiRecordOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// GenerateBimiRecordOptions
    /// </summary>
    [DataContract(Name = "GenerateBimiRecordOptions")]
    public partial class GenerateBimiRecordOptions : IEquatable<GenerateBimiRecordOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines _Version
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum VersionEnum
        {
            /// <summary>
            /// Enum BIMI1 for value: BIMI1
            /// </summary>
            [EnumMember(Value = "BIMI1")]
            BIMI1 = 1

        }


        /// <summary>
        /// Gets or Sets _Version
        /// </summary>
        [DataMember(Name = "version", IsRequired = true, EmitDefaultValue = true)]
        public VersionEnum _Version { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateBimiRecordOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected GenerateBimiRecordOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="GenerateBimiRecordOptions" /> class.
        /// </summary>
        /// <param name="domain">domain (required).</param>
        /// <param name="version">version (required).</param>
        /// <param name="logoUrl">logoUrl (required).</param>
        /// <param name="vmcUrl">vmcUrl.</param>
        public GenerateBimiRecordOptions(string domain = default(string), VersionEnum version = default(VersionEnum), string logoUrl = default(string), string vmcUrl = default(string))
        {
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for GenerateBimiRecordOptions and cannot be null");
            }
            this.Domain = domain;
            this._Version = version;
            // to ensure "logoUrl" is required (not null)
            if (logoUrl == null)
            {
                throw new ArgumentNullException("logoUrl is a required property for GenerateBimiRecordOptions and cannot be null");
            }
            this.LogoUrl = logoUrl;
            this.VmcUrl = vmcUrl;
        }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Gets or Sets LogoUrl
        /// </summary>
        [DataMember(Name = "logoUrl", IsRequired = true, EmitDefaultValue = true)]
        public string LogoUrl { get; set; }

        /// <summary>
        /// Gets or Sets VmcUrl
        /// </summary>
        [DataMember(Name = "vmcUrl", EmitDefaultValue = false)]
        public string VmcUrl { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GenerateBimiRecordOptions {\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  _Version: ").Append(_Version).Append("\n");
            sb.Append("  LogoUrl: ").Append(LogoUrl).Append("\n");
            sb.Append("  VmcUrl: ").Append(VmcUrl).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GenerateBimiRecordOptions);
        }

        /// <summary>
        /// Returns true if GenerateBimiRecordOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of GenerateBimiRecordOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GenerateBimiRecordOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this._Version == input._Version ||
                    this._Version.Equals(input._Version)
                ) && 
                (
                    this.LogoUrl == input.LogoUrl ||
                    (this.LogoUrl != null &&
                    this.LogoUrl.Equals(input.LogoUrl))
                ) && 
                (
                    this.VmcUrl == input.VmcUrl ||
                    (this.VmcUrl != null &&
                    this.VmcUrl.Equals(input.VmcUrl))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                hashCode = (hashCode * 59) + this._Version.GetHashCode();
                if (this.LogoUrl != null)
                {
                    hashCode = (hashCode * 59) + this.LogoUrl.GetHashCode();
                }
                if (this.VmcUrl != null)
                {
                    hashCode = (hashCode * 59) + this.VmcUrl.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ForwardEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for forwarding an email
    /// </summary>
    [DataContract(Name = "ForwardEmailOptions")]
    public partial class ForwardEmailOptions : IEquatable<ForwardEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ForwardEmailOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ForwardEmailOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ForwardEmailOptions" /> class.
        /// </summary>
        /// <param name="to">To recipients for forwarded email (required).</param>
        /// <param name="subject">Subject for forwarded email.</param>
        /// <param name="cc">Optional cc recipients.</param>
        /// <param name="bcc">Optional bcc recipients.</param>
        /// <param name="from">Optional from override.</param>
        /// <param name="useInboxName">Optionally use inbox name as display name for sender email address.</param>
        /// <param name="filterBouncedRecipients">Filter recipients to remove any bounced recipients from to, bcc, and cc before sending.</param>
        public ForwardEmailOptions(List<string> to = default(List<string>), string subject = default(string), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), string from = default(string), bool? useInboxName = default(bool?), bool? filterBouncedRecipients = default(bool?))
        {
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for ForwardEmailOptions and cannot be null");
            }
            this.To = to;
            this.Subject = subject;
            this.Cc = cc;
            this.Bcc = bcc;
            this.From = from;
            this.UseInboxName = useInboxName;
            this.FilterBouncedRecipients = filterBouncedRecipients;
        }

        /// <summary>
        /// To recipients for forwarded email
        /// </summary>
        /// <value>To recipients for forwarded email</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Subject for forwarded email
        /// </summary>
        /// <value>Subject for forwarded email</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Optional cc recipients
        /// </summary>
        /// <value>Optional cc recipients</value>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Optional bcc recipients
        /// </summary>
        /// <value>Optional bcc recipients</value>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Optional from override
        /// </summary>
        /// <value>Optional from override</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Optionally use inbox name as display name for sender email address
        /// </summary>
        /// <value>Optionally use inbox name as display name for sender email address</value>
        [DataMember(Name = "useInboxName", EmitDefaultValue = true)]
        public bool? UseInboxName { get; set; }

        /// <summary>
        /// Filter recipients to remove any bounced recipients from to, bcc, and cc before sending
        /// </summary>
        /// <value>Filter recipients to remove any bounced recipients from to, bcc, and cc before sending</value>
        [DataMember(Name = "filterBouncedRecipients", EmitDefaultValue = true)]
        public bool? FilterBouncedRecipients { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ForwardEmailOptions {\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  UseInboxName: ").Append(UseInboxName).Append("\n");
            sb.Append("  FilterBouncedRecipients: ").Append(FilterBouncedRecipients).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ForwardEmailOptions);
        }

        /// <summary>
        /// Returns true if ForwardEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ForwardEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ForwardEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.UseInboxName == input.UseInboxName ||
                    (this.UseInboxName != null &&
                    this.UseInboxName.Equals(input.UseInboxName))
                ) && 
                (
                    this.FilterBouncedRecipients == input.FilterBouncedRecipients ||
                    (this.FilterBouncedRecipients != null &&
                    this.FilterBouncedRecipients.Equals(input.FilterBouncedRecipients))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.UseInboxName != null)
                {
                    hashCode = (hashCode * 59) + this.UseInboxName.GetHashCode();
                }
                if (this.FilterBouncedRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.FilterBouncedRecipients.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FlushExpiredInboxesResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Result from calling expire on any inboxes that have applicable expiration dates given current time.
    /// </summary>
    [DataContract(Name = "FlushExpiredInboxesResult")]
    public partial class FlushExpiredInboxesResult : IEquatable<FlushExpiredInboxesResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FlushExpiredInboxesResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected FlushExpiredInboxesResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="FlushExpiredInboxesResult" /> class.
        /// </summary>
        /// <param name="inboxIds">Inbox IDs affected by expiration (required).</param>
        /// <param name="expireBefore">DateTime to filter inboxes so that those expiring before this time are expired (required).</param>
        public FlushExpiredInboxesResult(List<Guid> inboxIds = default(List<Guid>), DateTime expireBefore = default(DateTime))
        {
            // to ensure "inboxIds" is required (not null)
            if (inboxIds == null)
            {
                throw new ArgumentNullException("inboxIds is a required property for FlushExpiredInboxesResult and cannot be null");
            }
            this.InboxIds = inboxIds;
            this.ExpireBefore = expireBefore;
        }

        /// <summary>
        /// Inbox IDs affected by expiration
        /// </summary>
        /// <value>Inbox IDs affected by expiration</value>
        [DataMember(Name = "inboxIds", IsRequired = true, EmitDefaultValue = true)]
        public List<Guid> InboxIds { get; set; }

        /// <summary>
        /// DateTime to filter inboxes so that those expiring before this time are expired
        /// </summary>
        /// <value>DateTime to filter inboxes so that those expiring before this time are expired</value>
        [DataMember(Name = "expireBefore", IsRequired = true, EmitDefaultValue = true)]
        public DateTime ExpireBefore { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FlushExpiredInboxesResult {\n");
            sb.Append("  InboxIds: ").Append(InboxIds).Append("\n");
            sb.Append("  ExpireBefore: ").Append(ExpireBefore).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FlushExpiredInboxesResult);
        }

        /// <summary>
        /// Returns true if FlushExpiredInboxesResult instances are equal
        /// </summary>
        /// <param name="input">Instance of FlushExpiredInboxesResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FlushExpiredInboxesResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxIds == input.InboxIds ||
                    this.InboxIds != null &&
                    input.InboxIds != null &&
                    this.InboxIds.SequenceEqual(input.InboxIds)
                ) && 
                (
                    this.ExpireBefore == input.ExpireBefore ||
                    (this.ExpireBefore != null &&
                    this.ExpireBefore.Equals(input.ExpireBefore))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxIds != null)
                {
                    hashCode = (hashCode * 59) + this.InboxIds.GetHashCode();
                }
                if (this.ExpireBefore != null)
                {
                    hashCode = (hashCode * 59) + this.ExpireBefore.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FilterBouncedRecipientsResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Remaining recipients that were filtered to remove bounced recipients
    /// </summary>
    [DataContract(Name = "FilterBouncedRecipientsResult")]
    public partial class FilterBouncedRecipientsResult : IEquatable<FilterBouncedRecipientsResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FilterBouncedRecipientsResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected FilterBouncedRecipientsResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="FilterBouncedRecipientsResult" /> class.
        /// </summary>
        /// <param name="filteredRecipients">filteredRecipients (required).</param>
        public FilterBouncedRecipientsResult(List<string> filteredRecipients = default(List<string>))
        {
            // to ensure "filteredRecipients" is required (not null)
            if (filteredRecipients == null)
            {
                throw new ArgumentNullException("filteredRecipients is a required property for FilterBouncedRecipientsResult and cannot be null");
            }
            this.FilteredRecipients = filteredRecipients;
        }

        /// <summary>
        /// Gets or Sets FilteredRecipients
        /// </summary>
        [DataMember(Name = "filteredRecipients", IsRequired = true, EmitDefaultValue = true)]
        public List<string> FilteredRecipients { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FilterBouncedRecipientsResult {\n");
            sb.Append("  FilteredRecipients: ").Append(FilteredRecipients).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FilterBouncedRecipientsResult);
        }

        /// <summary>
        /// Returns true if FilterBouncedRecipientsResult instances are equal
        /// </summary>
        /// <param name="input">Instance of FilterBouncedRecipientsResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FilterBouncedRecipientsResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.FilteredRecipients == input.FilteredRecipients ||
                    this.FilteredRecipients != null &&
                    input.FilteredRecipients != null &&
                    this.FilteredRecipients.SequenceEqual(input.FilteredRecipients)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.FilteredRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.FilteredRecipients.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FilterBouncedRecipientsOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for filtering bounced email recipients
    /// </summary>
    [DataContract(Name = "FilterBouncedRecipientsOptions")]
    public partial class FilterBouncedRecipientsOptions : IEquatable<FilterBouncedRecipientsOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FilterBouncedRecipientsOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected FilterBouncedRecipientsOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="FilterBouncedRecipientsOptions" /> class.
        /// </summary>
        /// <param name="emailRecipients">emailRecipients (required).</param>
        public FilterBouncedRecipientsOptions(List<string> emailRecipients = default(List<string>))
        {
            // to ensure "emailRecipients" is required (not null)
            if (emailRecipients == null)
            {
                throw new ArgumentNullException("emailRecipients is a required property for FilterBouncedRecipientsOptions and cannot be null");
            }
            this.EmailRecipients = emailRecipients;
        }

        /// <summary>
        /// Gets or Sets EmailRecipients
        /// </summary>
        [DataMember(Name = "emailRecipients", IsRequired = true, EmitDefaultValue = true)]
        public List<string> EmailRecipients { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FilterBouncedRecipientsOptions {\n");
            sb.Append("  EmailRecipients: ").Append(EmailRecipients).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FilterBouncedRecipientsOptions);
        }

        /// <summary>
        /// Returns true if FilterBouncedRecipientsOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of FilterBouncedRecipientsOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FilterBouncedRecipientsOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailRecipients == input.EmailRecipients ||
                    this.EmailRecipients != null &&
                    input.EmailRecipients != null &&
                    this.EmailRecipients.SequenceEqual(input.EmailRecipients)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.EmailRecipients.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FakeEmailResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// FakeEmailResult
    /// </summary>
    [DataContract(Name = "FakeEmailResult")]
    public partial class FakeEmailResult : IEquatable<FakeEmailResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FakeEmailResult" /> class.
        /// </summary>
        /// <param name="email">email.</param>
        public FakeEmailResult(FakeEmailDto email = default(FakeEmailDto))
        {
            this.Email = email;
        }

        /// <summary>
        /// Gets or Sets Email
        /// </summary>
        [DataMember(Name = "email", EmitDefaultValue = false)]
        public FakeEmailDto Email { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FakeEmailResult {\n");
            sb.Append("  Email: ").Append(Email).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FakeEmailResult);
        }

        /// <summary>
        /// Returns true if FakeEmailResult instances are equal
        /// </summary>
        /// <param name="input">Instance of FakeEmailResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FakeEmailResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Email == input.Email ||
                    (this.Email != null &&
                    this.Email.Equals(input.Email))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Email != null)
                {
                    hashCode = (hashCode * 59) + this.Email.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FakeEmailPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// FakeEmailPreview
    /// </summary>
    [DataContract(Name = "FakeEmailPreview")]
    public partial class FakeEmailPreview : IEquatable<FakeEmailPreview>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FakeEmailPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected FakeEmailPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="FakeEmailPreview" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="sender">sender.</param>
        /// <param name="recipients">recipients.</param>
        /// <param name="subject">subject.</param>
        /// <param name="preview">preview.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="seen">seen (required).</param>
        public FakeEmailPreview(Guid id = default(Guid), string emailAddress = default(string), Sender sender = default(Sender), EmailRecipients recipients = default(EmailRecipients), string subject = default(string), string preview = default(string), DateTime createdAt = default(DateTime), bool seen = default(bool))
        {
            this.Id = id;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for FakeEmailPreview and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.CreatedAt = createdAt;
            this.Seen = seen;
            this.Sender = sender;
            this.Recipients = recipients;
            this.Subject = subject;
            this.Preview = preview;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Sender
        /// </summary>
        [DataMember(Name = "sender", EmitDefaultValue = true)]
        public Sender Sender { get; set; }

        /// <summary>
        /// Gets or Sets Recipients
        /// </summary>
        [DataMember(Name = "recipients", EmitDefaultValue = true)]
        public EmailRecipients Recipients { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Preview
        /// </summary>
        [DataMember(Name = "preview", EmitDefaultValue = false)]
        public string Preview { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Seen
        /// </summary>
        [DataMember(Name = "seen", IsRequired = true, EmitDefaultValue = true)]
        public bool Seen { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FakeEmailPreview {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Preview: ").Append(Preview).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Seen: ").Append(Seen).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FakeEmailPreview);
        }

        /// <summary>
        /// Returns true if FakeEmailPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of FakeEmailPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FakeEmailPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    (this.Recipients != null &&
                    this.Recipients.Equals(input.Recipients))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Preview == input.Preview ||
                    (this.Preview != null &&
                    this.Preview.Equals(input.Preview))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Seen == input.Seen ||
                    this.Seen.Equals(input.Seen)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Preview != null)
                {
                    hashCode = (hashCode * 59) + this.Preview.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Seen.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/FakeEmailDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// FakeEmailDto
    /// </summary>
    [DataContract(Name = "FakeEmailDto")]
    public partial class FakeEmailDto : IEquatable<FakeEmailDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FakeEmailDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected FakeEmailDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="FakeEmailDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="sender">sender.</param>
        /// <param name="recipients">recipients.</param>
        /// <param name="subject">subject.</param>
        /// <param name="preview">preview.</param>
        /// <param name="body">body (required).</param>
        /// <param name="seen">seen (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public FakeEmailDto(Guid id = default(Guid), string emailAddress = default(string), Sender sender = default(Sender), EmailRecipients recipients = default(EmailRecipients), string subject = default(string), string preview = default(string), string body = default(string), bool seen = default(bool), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for FakeEmailDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for FakeEmailDto and cannot be null");
            }
            this.Body = body;
            this.Seen = seen;
            this.CreatedAt = createdAt;
            this.Sender = sender;
            this.Recipients = recipients;
            this.Subject = subject;
            this.Preview = preview;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Sender
        /// </summary>
        [DataMember(Name = "sender", EmitDefaultValue = true)]
        public Sender Sender { get; set; }

        /// <summary>
        /// Gets or Sets Recipients
        /// </summary>
        [DataMember(Name = "recipients", EmitDefaultValue = true)]
        public EmailRecipients Recipients { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Preview
        /// </summary>
        [DataMember(Name = "preview", EmitDefaultValue = false)]
        public string Preview { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Gets or Sets Seen
        /// </summary>
        [DataMember(Name = "seen", IsRequired = true, EmitDefaultValue = true)]
        public bool Seen { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class FakeEmailDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Preview: ").Append(Preview).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  Seen: ").Append(Seen).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as FakeEmailDto);
        }

        /// <summary>
        /// Returns true if FakeEmailDto instances are equal
        /// </summary>
        /// <param name="input">Instance of FakeEmailDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(FakeEmailDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    (this.Recipients != null &&
                    this.Recipients.Equals(input.Recipients))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Preview == input.Preview ||
                    (this.Preview != null &&
                    this.Preview.Equals(input.Preview))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.Seen == input.Seen ||
                    this.Seen.Equals(input.Seen)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Preview != null)
                {
                    hashCode = (hashCode * 59) + this.Preview.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Seen.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ExportOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for exporting user data
    /// </summary>
    [DataContract(Name = "ExportOptions")]
    public partial class ExportOptions : IEquatable<ExportOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines OutputFormat
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum OutputFormatEnum
        {
            /// <summary>
            /// Enum DEFAULT for value: CSV_DEFAULT
            /// </summary>
            [EnumMember(Value = "CSV_DEFAULT")]
            DEFAULT = 1,

            /// <summary>
            /// Enum EXCEL for value: CSV_EXCEL
            /// </summary>
            [EnumMember(Value = "CSV_EXCEL")]
            EXCEL = 2

        }


        /// <summary>
        /// Gets or Sets OutputFormat
        /// </summary>
        [DataMember(Name = "outputFormat", IsRequired = true, EmitDefaultValue = true)]
        public OutputFormatEnum OutputFormat { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExportOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ExportOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExportOptions" /> class.
        /// </summary>
        /// <param name="outputFormat">outputFormat (required).</param>
        /// <param name="excludePreviouslyExported">excludePreviouslyExported.</param>
        /// <param name="createdEarliestTime">createdEarliestTime.</param>
        /// <param name="createdOldestTime">createdOldestTime.</param>
        /// <param name="filter">filter.</param>
        /// <param name="listSeparatorToken">listSeparatorToken.</param>
        public ExportOptions(OutputFormatEnum outputFormat = default(OutputFormatEnum), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), string filter = default(string), string listSeparatorToken = default(string))
        {
            this.OutputFormat = outputFormat;
            this.ExcludePreviouslyExported = excludePreviouslyExported;
            this.CreatedEarliestTime = createdEarliestTime;
            this.CreatedOldestTime = createdOldestTime;
            this.Filter = filter;
            this.ListSeparatorToken = listSeparatorToken;
        }

        /// <summary>
        /// Gets or Sets ExcludePreviouslyExported
        /// </summary>
        [DataMember(Name = "excludePreviouslyExported", EmitDefaultValue = true)]
        public bool? ExcludePreviouslyExported { get; set; }

        /// <summary>
        /// Gets or Sets CreatedEarliestTime
        /// </summary>
        [DataMember(Name = "createdEarliestTime", EmitDefaultValue = true)]
        public DateTime? CreatedEarliestTime { get; set; }

        /// <summary>
        /// Gets or Sets CreatedOldestTime
        /// </summary>
        [DataMember(Name = "createdOldestTime", EmitDefaultValue = true)]
        public DateTime? CreatedOldestTime { get; set; }

        /// <summary>
        /// Gets or Sets Filter
        /// </summary>
        [DataMember(Name = "filter", EmitDefaultValue = true)]
        public string Filter { get; set; }

        /// <summary>
        /// Gets or Sets ListSeparatorToken
        /// </summary>
        [DataMember(Name = "listSeparatorToken", EmitDefaultValue = true)]
        public string ListSeparatorToken { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ExportOptions {\n");
            sb.Append("  OutputFormat: ").Append(OutputFormat).Append("\n");
            sb.Append("  ExcludePreviouslyExported: ").Append(ExcludePreviouslyExported).Append("\n");
            sb.Append("  CreatedEarliestTime: ").Append(CreatedEarliestTime).Append("\n");
            sb.Append("  CreatedOldestTime: ").Append(CreatedOldestTime).Append("\n");
            sb.Append("  Filter: ").Append(Filter).Append("\n");
            sb.Append("  ListSeparatorToken: ").Append(ListSeparatorToken).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ExportOptions);
        }

        /// <summary>
        /// Returns true if ExportOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ExportOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ExportOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.OutputFormat == input.OutputFormat ||
                    this.OutputFormat.Equals(input.OutputFormat)
                ) && 
                (
                    this.ExcludePreviouslyExported == input.ExcludePreviouslyExported ||
                    (this.ExcludePreviouslyExported != null &&
                    this.ExcludePreviouslyExported.Equals(input.ExcludePreviouslyExported))
                ) && 
                (
                    this.CreatedEarliestTime == input.CreatedEarliestTime ||
                    (this.CreatedEarliestTime != null &&
                    this.CreatedEarliestTime.Equals(input.CreatedEarliestTime))
                ) && 
                (
                    this.CreatedOldestTime == input.CreatedOldestTime ||
                    (this.CreatedOldestTime != null &&
                    this.CreatedOldestTime.Equals(input.CreatedOldestTime))
                ) && 
                (
                    this.Filter == input.Filter ||
                    (this.Filter != null &&
                    this.Filter.Equals(input.Filter))
                ) && 
                (
                    this.ListSeparatorToken == input.ListSeparatorToken ||
                    (this.ListSeparatorToken != null &&
                    this.ListSeparatorToken.Equals(input.ListSeparatorToken))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.OutputFormat.GetHashCode();
                if (this.ExcludePreviouslyExported != null)
                {
                    hashCode = (hashCode * 59) + this.ExcludePreviouslyExported.GetHashCode();
                }
                if (this.CreatedEarliestTime != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedEarliestTime.GetHashCode();
                }
                if (this.CreatedOldestTime != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedOldestTime.GetHashCode();
                }
                if (this.Filter != null)
                {
                    hashCode = (hashCode * 59) + this.Filter.GetHashCode();
                }
                if (this.ListSeparatorToken != null)
                {
                    hashCode = (hashCode * 59) + this.ListSeparatorToken.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Export download link
    /// </summary>
    [DataContract(Name = "ExportLink")]
    public partial class ExportLink : IEquatable<ExportLink>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ExportLink" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ExportLink() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExportLink" /> class.
        /// </summary>
        /// <param name="downloadLink">downloadLink (required).</param>
        public ExportLink(string downloadLink = default(string))
        {
            // to ensure "downloadLink" is required (not null)
            if (downloadLink == null)
            {
                throw new ArgumentNullException("downloadLink is a required property for ExportLink and cannot be null");
            }
            this.DownloadLink = downloadLink;
        }

        /// <summary>
        /// Gets or Sets DownloadLink
        /// </summary>
        [DataMember(Name = "downloadLink", IsRequired = true, EmitDefaultValue = true)]
        public string DownloadLink { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ExportLink {\n");
            sb.Append("  DownloadLink: ").Append(DownloadLink).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ExportLink);
        }

        /// <summary>
        /// Returns true if ExportLink instances are equal
        /// </summary>
        /// <param name="input">Instance of ExportLink to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ExportLink input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.DownloadLink == input.DownloadLink ||
                    (this.DownloadLink != null &&
                    this.DownloadLink.Equals(input.DownloadLink))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.DownloadLink != null)
                {
                    hashCode = (hashCode * 59) + this.DownloadLink.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ExpiredInboxRecordProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Record of inbox expiration
    /// </summary>
    [DataContract(Name = "ExpiredInboxRecordProjection")]
    public partial class ExpiredInboxRecordProjection : IEquatable<ExpiredInboxRecordProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredInboxRecordProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ExpiredInboxRecordProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredInboxRecordProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="id">id (required).</param>
        public ExpiredInboxRecordProjection(DateTime createdAt = default(DateTime), string emailAddress = default(string), Guid userId = default(Guid), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for ExpiredInboxRecordProjection and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.UserId = userId;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ExpiredInboxRecordProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ExpiredInboxRecordProjection);
        }

        /// <summary>
        /// Returns true if ExpiredInboxRecordProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ExpiredInboxRecordProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ExpiredInboxRecordProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ExpiredInboxDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Expired inbox
    /// </summary>
    [DataContract(Name = "ExpiredInboxDto")]
    public partial class ExpiredInboxDto : IEquatable<ExpiredInboxDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredInboxDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ExpiredInboxDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredInboxDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        public ExpiredInboxDto(Guid id = default(Guid), Guid inboxId = default(Guid), string emailAddress = default(string))
        {
            this.Id = id;
            this.InboxId = inboxId;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for ExpiredInboxDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ExpiredInboxDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ExpiredInboxDto);
        }

        /// <summary>
        /// Returns true if ExpiredInboxDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ExpiredInboxDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ExpiredInboxDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ExpirationDefaults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Expiration defaults for your account
    /// </summary>
    [DataContract(Name = "ExpirationDefaults")]
    public partial class ExpirationDefaults : IEquatable<ExpirationDefaults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpirationDefaults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ExpirationDefaults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpirationDefaults" /> class.
        /// </summary>
        /// <param name="defaultExpirationMillis">defaultExpirationMillis.</param>
        /// <param name="maxExpirationMillis">maxExpirationMillis.</param>
        /// <param name="defaultExpiresAt">defaultExpiresAt.</param>
        /// <param name="canPermanentInbox">canPermanentInbox (required).</param>
        /// <param name="nextInboxAllowsPermanent">nextInboxAllowsPermanent (required).</param>
        public ExpirationDefaults(long? defaultExpirationMillis = default(long?), long? maxExpirationMillis = default(long?), DateTime? defaultExpiresAt = default(DateTime?), bool canPermanentInbox = default(bool), bool nextInboxAllowsPermanent = default(bool))
        {
            this.CanPermanentInbox = canPermanentInbox;
            this.NextInboxAllowsPermanent = nextInboxAllowsPermanent;
            this.DefaultExpirationMillis = defaultExpirationMillis;
            this.MaxExpirationMillis = maxExpirationMillis;
            this.DefaultExpiresAt = defaultExpiresAt;
        }

        /// <summary>
        /// Gets or Sets DefaultExpirationMillis
        /// </summary>
        [DataMember(Name = "defaultExpirationMillis", EmitDefaultValue = true)]
        public long? DefaultExpirationMillis { get; set; }

        /// <summary>
        /// Gets or Sets MaxExpirationMillis
        /// </summary>
        [DataMember(Name = "maxExpirationMillis", EmitDefaultValue = true)]
        public long? MaxExpirationMillis { get; set; }

        /// <summary>
        /// Gets or Sets DefaultExpiresAt
        /// </summary>
        [DataMember(Name = "defaultExpiresAt", EmitDefaultValue = true)]
        public DateTime? DefaultExpiresAt { get; set; }

        /// <summary>
        /// Gets or Sets CanPermanentInbox
        /// </summary>
        [DataMember(Name = "canPermanentInbox", IsRequired = true, EmitDefaultValue = true)]
        public bool CanPermanentInbox { get; set; }

        /// <summary>
        /// Gets or Sets NextInboxAllowsPermanent
        /// </summary>
        [DataMember(Name = "nextInboxAllowsPermanent", IsRequired = true, EmitDefaultValue = true)]
        public bool NextInboxAllowsPermanent { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ExpirationDefaults {\n");
            sb.Append("  DefaultExpirationMillis: ").Append(DefaultExpirationMillis).Append("\n");
            sb.Append("  MaxExpirationMillis: ").Append(MaxExpirationMillis).Append("\n");
            sb.Append("  DefaultExpiresAt: ").Append(DefaultExpiresAt).Append("\n");
            sb.Append("  CanPermanentInbox: ").Append(CanPermanentInbox).Append("\n");
            sb.Append("  NextInboxAllowsPermanent: ").Append(NextInboxAllowsPermanent).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ExpirationDefaults);
        }

        /// <summary>
        /// Returns true if ExpirationDefaults instances are equal
        /// </summary>
        /// <param name="input">Instance of ExpirationDefaults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ExpirationDefaults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.DefaultExpirationMillis == input.DefaultExpirationMillis ||
                    (this.DefaultExpirationMillis != null &&
                    this.DefaultExpirationMillis.Equals(input.DefaultExpirationMillis))
                ) && 
                (
                    this.MaxExpirationMillis == input.MaxExpirationMillis ||
                    (this.MaxExpirationMillis != null &&
                    this.MaxExpirationMillis.Equals(input.MaxExpirationMillis))
                ) && 
                (
                    this.DefaultExpiresAt == input.DefaultExpiresAt ||
                    (this.DefaultExpiresAt != null &&
                    this.DefaultExpiresAt.Equals(input.DefaultExpiresAt))
                ) && 
                (
                    this.CanPermanentInbox == input.CanPermanentInbox ||
                    this.CanPermanentInbox.Equals(input.CanPermanentInbox)
                ) && 
                (
                    this.NextInboxAllowsPermanent == input.NextInboxAllowsPermanent ||
                    this.NextInboxAllowsPermanent.Equals(input.NextInboxAllowsPermanent)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.DefaultExpirationMillis != null)
                {
                    hashCode = (hashCode * 59) + this.DefaultExpirationMillis.GetHashCode();
                }
                if (this.MaxExpirationMillis != null)
                {
                    hashCode = (hashCode * 59) + this.MaxExpirationMillis.GetHashCode();
                }
                if (this.DefaultExpiresAt != null)
                {
                    hashCode = (hashCode * 59) + this.DefaultExpiresAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.CanPermanentInbox.GetHashCode();
                hashCode = (hashCode * 59) + this.NextInboxAllowsPermanent.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmptyResponseDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmptyResponseDto
    /// </summary>
    [DataContract(Name = "EmptyResponseDto")]
    public partial class EmptyResponseDto : IEquatable<EmptyResponseDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmptyResponseDto" /> class.
        /// </summary>
        /// <param name="message">message.</param>
        public EmptyResponseDto(string message = default(string))
        {
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmptyResponseDto {\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmptyResponseDto);
        }

        /// <summary>
        /// Returns true if EmptyResponseDto instances are equal
        /// </summary>
        /// <param name="input">Instance of EmptyResponseDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmptyResponseDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmergencyAddressDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmergencyAddressDto
    /// </summary>
    [DataContract(Name = "EmergencyAddressDto")]
    public partial class EmergencyAddressDto : IEquatable<EmergencyAddressDto>, IValidatableObject
    {
        /// <summary>
        /// Defines PhoneCountry
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PhoneCountryEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets PhoneCountry
        /// </summary>
        [DataMember(Name = "phoneCountry", IsRequired = true, EmitDefaultValue = true)]
        public PhoneCountryEnum PhoneCountry { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmergencyAddressDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmergencyAddressDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmergencyAddressDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="address1">address1 (required).</param>
        /// <param name="phoneCountry">phoneCountry (required).</param>
        public EmergencyAddressDto(Guid id = default(Guid), string address1 = default(string), PhoneCountryEnum phoneCountry = default(PhoneCountryEnum))
        {
            this.Id = id;
            // to ensure "address1" is required (not null)
            if (address1 == null)
            {
                throw new ArgumentNullException("address1 is a required property for EmergencyAddressDto and cannot be null");
            }
            this.Address1 = address1;
            this.PhoneCountry = phoneCountry;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Address1
        /// </summary>
        [DataMember(Name = "address1", IsRequired = true, EmitDefaultValue = true)]
        public string Address1 { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmergencyAddressDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Address1: ").Append(Address1).Append("\n");
            sb.Append("  PhoneCountry: ").Append(PhoneCountry).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmergencyAddressDto);
        }

        /// <summary>
        /// Returns true if EmergencyAddressDto instances are equal
        /// </summary>
        /// <param name="input">Instance of EmergencyAddressDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmergencyAddressDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Address1 == input.Address1 ||
                    (this.Address1 != null &&
                    this.Address1.Equals(input.Address1))
                ) && 
                (
                    this.PhoneCountry == input.PhoneCountry ||
                    this.PhoneCountry.Equals(input.PhoneCountry)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Address1 != null)
                {
                    hashCode = (hashCode * 59) + this.Address1.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PhoneCountry.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmergencyAddress.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmergencyAddress
    /// </summary>
    [DataContract(Name = "EmergencyAddress")]
    public partial class EmergencyAddress : IEquatable<EmergencyAddress>, IValidatableObject
    {
        /// <summary>
        /// Defines PhoneCountry
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PhoneCountryEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets PhoneCountry
        /// </summary>
        [DataMember(Name = "phoneCountry", IsRequired = true, EmitDefaultValue = true)]
        public PhoneCountryEnum PhoneCountry { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmergencyAddress" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmergencyAddress() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmergencyAddress" /> class.
        /// </summary>
        /// <param name="id">id.</param>
        /// <param name="sid">sid (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="displayName">displayName (required).</param>
        /// <param name="customerName">customerName (required).</param>
        /// <param name="address1">address1 (required).</param>
        /// <param name="city">city (required).</param>
        /// <param name="region">region (required).</param>
        /// <param name="postalCode">postalCode (required).</param>
        /// <param name="phoneCountry">phoneCountry (required).</param>
        /// <param name="accountSid">accountSid (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public EmergencyAddress(Guid id = default(Guid), string sid = default(string), Guid userId = default(Guid), string displayName = default(string), string customerName = default(string), string address1 = default(string), string city = default(string), string region = default(string), string postalCode = default(string), PhoneCountryEnum phoneCountry = default(PhoneCountryEnum), string accountSid = default(string), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            // to ensure "sid" is required (not null)
            if (sid == null)
            {
                throw new ArgumentNullException("sid is a required property for EmergencyAddress and cannot be null");
            }
            this.Sid = sid;
            this.UserId = userId;
            // to ensure "displayName" is required (not null)
            if (displayName == null)
            {
                throw new ArgumentNullException("displayName is a required property for EmergencyAddress and cannot be null");
            }
            this.DisplayName = displayName;
            // to ensure "customerName" is required (not null)
            if (customerName == null)
            {
                throw new ArgumentNullException("customerName is a required property for EmergencyAddress and cannot be null");
            }
            this.CustomerName = customerName;
            // to ensure "address1" is required (not null)
            if (address1 == null)
            {
                throw new ArgumentNullException("address1 is a required property for EmergencyAddress and cannot be null");
            }
            this.Address1 = address1;
            // to ensure "city" is required (not null)
            if (city == null)
            {
                throw new ArgumentNullException("city is a required property for EmergencyAddress and cannot be null");
            }
            this.City = city;
            // to ensure "region" is required (not null)
            if (region == null)
            {
                throw new ArgumentNullException("region is a required property for EmergencyAddress and cannot be null");
            }
            this.Region = region;
            // to ensure "postalCode" is required (not null)
            if (postalCode == null)
            {
                throw new ArgumentNullException("postalCode is a required property for EmergencyAddress and cannot be null");
            }
            this.PostalCode = postalCode;
            this.PhoneCountry = phoneCountry;
            // to ensure "accountSid" is required (not null)
            if (accountSid == null)
            {
                throw new ArgumentNullException("accountSid is a required property for EmergencyAddress and cannot be null");
            }
            this.AccountSid = accountSid;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Sid
        /// </summary>
        [DataMember(Name = "sid", IsRequired = true, EmitDefaultValue = true)]
        public string Sid { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets DisplayName
        /// </summary>
        [DataMember(Name = "displayName", IsRequired = true, EmitDefaultValue = true)]
        public string DisplayName { get; set; }

        /// <summary>
        /// Gets or Sets CustomerName
        /// </summary>
        [DataMember(Name = "customerName", IsRequired = true, EmitDefaultValue = true)]
        public string CustomerName { get; set; }

        /// <summary>
        /// Gets or Sets Address1
        /// </summary>
        [DataMember(Name = "address1", IsRequired = true, EmitDefaultValue = true)]
        public string Address1 { get; set; }

        /// <summary>
        /// Gets or Sets City
        /// </summary>
        [DataMember(Name = "city", IsRequired = true, EmitDefaultValue = true)]
        public string City { get; set; }

        /// <summary>
        /// Gets or Sets Region
        /// </summary>
        [DataMember(Name = "region", IsRequired = true, EmitDefaultValue = true)]
        public string Region { get; set; }

        /// <summary>
        /// Gets or Sets PostalCode
        /// </summary>
        [DataMember(Name = "postalCode", IsRequired = true, EmitDefaultValue = true)]
        public string PostalCode { get; set; }

        /// <summary>
        /// Gets or Sets AccountSid
        /// </summary>
        [DataMember(Name = "accountSid", IsRequired = true, EmitDefaultValue = true)]
        public string AccountSid { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmergencyAddress {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Sid: ").Append(Sid).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  DisplayName: ").Append(DisplayName).Append("\n");
            sb.Append("  CustomerName: ").Append(CustomerName).Append("\n");
            sb.Append("  Address1: ").Append(Address1).Append("\n");
            sb.Append("  City: ").Append(City).Append("\n");
            sb.Append("  Region: ").Append(Region).Append("\n");
            sb.Append("  PostalCode: ").Append(PostalCode).Append("\n");
            sb.Append("  PhoneCountry: ").Append(PhoneCountry).Append("\n");
            sb.Append("  AccountSid: ").Append(AccountSid).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmergencyAddress);
        }

        /// <summary>
        /// Returns true if EmergencyAddress instances are equal
        /// </summary>
        /// <param name="input">Instance of EmergencyAddress to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmergencyAddress input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Sid == input.Sid ||
                    (this.Sid != null &&
                    this.Sid.Equals(input.Sid))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.DisplayName == input.DisplayName ||
                    (this.DisplayName != null &&
                    this.DisplayName.Equals(input.DisplayName))
                ) && 
                (
                    this.CustomerName == input.CustomerName ||
                    (this.CustomerName != null &&
                    this.CustomerName.Equals(input.CustomerName))
                ) && 
                (
                    this.Address1 == input.Address1 ||
                    (this.Address1 != null &&
                    this.Address1.Equals(input.Address1))
                ) && 
                (
                    this.City == input.City ||
                    (this.City != null &&
                    this.City.Equals(input.City))
                ) && 
                (
                    this.Region == input.Region ||
                    (this.Region != null &&
                    this.Region.Equals(input.Region))
                ) && 
                (
                    this.PostalCode == input.PostalCode ||
                    (this.PostalCode != null &&
                    this.PostalCode.Equals(input.PostalCode))
                ) && 
                (
                    this.PhoneCountry == input.PhoneCountry ||
                    this.PhoneCountry.Equals(input.PhoneCountry)
                ) && 
                (
                    this.AccountSid == input.AccountSid ||
                    (this.AccountSid != null &&
                    this.AccountSid.Equals(input.AccountSid))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Sid != null)
                {
                    hashCode = (hashCode * 59) + this.Sid.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.DisplayName != null)
                {
                    hashCode = (hashCode * 59) + this.DisplayName.GetHashCode();
                }
                if (this.CustomerName != null)
                {
                    hashCode = (hashCode * 59) + this.CustomerName.GetHashCode();
                }
                if (this.Address1 != null)
                {
                    hashCode = (hashCode * 59) + this.Address1.GetHashCode();
                }
                if (this.City != null)
                {
                    hashCode = (hashCode * 59) + this.City.GetHashCode();
                }
                if (this.Region != null)
                {
                    hashCode = (hashCode * 59) + this.Region.GetHashCode();
                }
                if (this.PostalCode != null)
                {
                    hashCode = (hashCode * 59) + this.PostalCode.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.PhoneCountry.GetHashCode();
                if (this.AccountSid != null)
                {
                    hashCode = (hashCode * 59) + this.AccountSid.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailVerificationResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email verification result. Valid means email address exists according to response from mail server running at the domain and port given.
    /// </summary>
    [DataContract(Name = "EmailVerificationResult")]
    public partial class EmailVerificationResult : IEquatable<EmailVerificationResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailVerificationResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationResult" /> class.
        /// </summary>
        /// <param name="domainName">domainName (required).</param>
        /// <param name="port">port (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="isValid">isValid (required).</param>
        /// <param name="error">error.</param>
        public EmailVerificationResult(string domainName = default(string), int port = default(int), string emailAddress = default(string), bool isValid = default(bool), string error = default(string))
        {
            // to ensure "domainName" is required (not null)
            if (domainName == null)
            {
                throw new ArgumentNullException("domainName is a required property for EmailVerificationResult and cannot be null");
            }
            this.DomainName = domainName;
            this.Port = port;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for EmailVerificationResult and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.IsValid = isValid;
            this.Error = error;
        }

        /// <summary>
        /// Gets or Sets DomainName
        /// </summary>
        [DataMember(Name = "domainName", IsRequired = true, EmitDefaultValue = true)]
        public string DomainName { get; set; }

        /// <summary>
        /// Gets or Sets Port
        /// </summary>
        [DataMember(Name = "port", IsRequired = true, EmitDefaultValue = true)]
        public int Port { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets IsValid
        /// </summary>
        [DataMember(Name = "isValid", IsRequired = true, EmitDefaultValue = true)]
        public bool IsValid { get; set; }

        /// <summary>
        /// Gets or Sets Error
        /// </summary>
        [DataMember(Name = "error", EmitDefaultValue = true)]
        public string Error { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailVerificationResult {\n");
            sb.Append("  DomainName: ").Append(DomainName).Append("\n");
            sb.Append("  Port: ").Append(Port).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  IsValid: ").Append(IsValid).Append("\n");
            sb.Append("  Error: ").Append(Error).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailVerificationResult);
        }

        /// <summary>
        /// Returns true if EmailVerificationResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailVerificationResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailVerificationResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.DomainName == input.DomainName ||
                    (this.DomainName != null &&
                    this.DomainName.Equals(input.DomainName))
                ) && 
                (
                    this.Port == input.Port ||
                    this.Port.Equals(input.Port)
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.IsValid == input.IsValid ||
                    this.IsValid.Equals(input.IsValid)
                ) && 
                (
                    this.Error == input.Error ||
                    (this.Error != null &&
                    this.Error.Equals(input.Error))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.DomainName != null)
                {
                    hashCode = (hashCode * 59) + this.DomainName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Port.GetHashCode();
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsValid.GetHashCode();
                if (this.Error != null)
                {
                    hashCode = (hashCode * 59) + this.Error.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailValidationRequestDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email validation request
    /// </summary>
    [DataContract(Name = "EmailValidationRequestDto")]
    public partial class EmailValidationRequestDto : IEquatable<EmailValidationRequestDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailValidationRequestDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailValidationRequestDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailValidationRequestDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="isValid">isValid (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public EmailValidationRequestDto(Guid id = default(Guid), Guid userId = default(Guid), string emailAddress = default(string), bool isValid = default(bool), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for EmailValidationRequestDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.IsValid = isValid;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets IsValid
        /// </summary>
        [DataMember(Name = "isValid", IsRequired = true, EmitDefaultValue = true)]
        public bool IsValid { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailValidationRequestDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  IsValid: ").Append(IsValid).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailValidationRequestDto);
        }

        /// <summary>
        /// Returns true if EmailValidationRequestDto instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailValidationRequestDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailValidationRequestDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.IsValid == input.IsValid ||
                    this.IsValid.Equals(input.IsValid)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsValid.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailTextLinesResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Parsed text of an email
    /// </summary>
    [DataContract(Name = "EmailTextLinesResult")]
    public partial class EmailTextLinesResult : IEquatable<EmailTextLinesResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailTextLinesResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailTextLinesResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailTextLinesResult" /> class.
        /// </summary>
        /// <param name="lines">lines (required).</param>
        /// <param name="body">body (required).</param>
        public EmailTextLinesResult(List<string> lines = default(List<string>), string body = default(string))
        {
            // to ensure "lines" is required (not null)
            if (lines == null)
            {
                throw new ArgumentNullException("lines is a required property for EmailTextLinesResult and cannot be null");
            }
            this.Lines = lines;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for EmailTextLinesResult and cannot be null");
            }
            this.Body = body;
        }

        /// <summary>
        /// Gets or Sets Lines
        /// </summary>
        [DataMember(Name = "lines", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Lines { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailTextLinesResult {\n");
            sb.Append("  Lines: ").Append(Lines).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailTextLinesResult);
        }

        /// <summary>
        /// Returns true if EmailTextLinesResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailTextLinesResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailTextLinesResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Lines == input.Lines ||
                    this.Lines != null &&
                    input.Lines != null &&
                    this.Lines.SequenceEqual(input.Lines)
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Lines != null)
                {
                    hashCode = (hashCode * 59) + this.Lines.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailScreenshotResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailScreenshotResult
    /// </summary>
    [DataContract(Name = "EmailScreenshotResult")]
    public partial class EmailScreenshotResult : IEquatable<EmailScreenshotResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailScreenshotResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailScreenshotResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailScreenshotResult" /> class.
        /// </summary>
        /// <param name="base64EncodedImage">base64EncodedImage (required).</param>
        public EmailScreenshotResult(string base64EncodedImage = default(string))
        {
            // to ensure "base64EncodedImage" is required (not null)
            if (base64EncodedImage == null)
            {
                throw new ArgumentNullException("base64EncodedImage is a required property for EmailScreenshotResult and cannot be null");
            }
            this.Base64EncodedImage = base64EncodedImage;
        }

        /// <summary>
        /// Gets or Sets Base64EncodedImage
        /// </summary>
        [DataMember(Name = "base64EncodedImage", IsRequired = true, EmitDefaultValue = true)]
        public string Base64EncodedImage { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailScreenshotResult {\n");
            sb.Append("  Base64EncodedImage: ").Append(Base64EncodedImage).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailScreenshotResult);
        }

        /// <summary>
        /// Returns true if EmailScreenshotResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailScreenshotResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailScreenshotResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Base64EncodedImage == input.Base64EncodedImage ||
                    (this.Base64EncodedImage != null &&
                    this.Base64EncodedImage.Equals(input.Base64EncodedImage))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Base64EncodedImage != null)
                {
                    hashCode = (hashCode * 59) + this.Base64EncodedImage.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailRecipients.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// The &#x60;To&#x60;,&#x60;CC&#x60;,&#x60;BCC&#x60; recipients stored in object form with email address and name accessible.
    /// </summary>
    [DataContract(Name = "EmailRecipients")]
    public partial class EmailRecipients : IEquatable<EmailRecipients>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailRecipients" /> class.
        /// </summary>
        /// <param name="to">to.</param>
        /// <param name="cc">cc.</param>
        /// <param name="bcc">bcc.</param>
        public EmailRecipients(List<Recipient> to = default(List<Recipient>), List<Recipient> cc = default(List<Recipient>), List<Recipient> bcc = default(List<Recipient>))
        {
            this.To = to;
            this.Cc = cc;
            this.Bcc = bcc;
        }

        /// <summary>
        /// Gets or Sets To
        /// </summary>
        [DataMember(Name = "to", EmitDefaultValue = false)]
        public List<Recipient> To { get; set; }

        /// <summary>
        /// Gets or Sets Cc
        /// </summary>
        [DataMember(Name = "cc", EmitDefaultValue = false)]
        public List<Recipient> Cc { get; set; }

        /// <summary>
        /// Gets or Sets Bcc
        /// </summary>
        [DataMember(Name = "bcc", EmitDefaultValue = false)]
        public List<Recipient> Bcc { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailRecipients {\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailRecipients);
        }

        /// <summary>
        /// Returns true if EmailRecipients instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailRecipients to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailRecipients input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// A compact representation of a full email. Used in list endpoints to keep response sizes low. Body and attachments are not included. To get all fields of the email use the &#x60;getEmail&#x60; method with the email projection&#39;s ID. See &#x60;EmailDto&#x60; for documentation on projection properties.
    /// </summary>
    [DataContract(Name = "EmailProjection")]
    public partial class EmailProjection : IEquatable<EmailProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="attachments">attachments.</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="to">to (required).</param>
        /// <param name="domainId">domainId.</param>
        /// <param name="bcc">bcc.</param>
        /// <param name="cc">cc.</param>
        /// <param name="read">read (required).</param>
        /// <param name="bodyExcerpt">bodyExcerpt.</param>
        /// <param name="teamAccess">teamAccess (required).</param>
        /// <param name="bodyMD5Hash">bodyMD5Hash.</param>
        /// <param name="textExcerpt">textExcerpt.</param>
        /// <param name="subject">subject.</param>
        /// <param name="id">id (required).</param>
        /// <param name="from">from.</param>
        public EmailProjection(DateTime createdAt = default(DateTime), List<string> attachments = default(List<string>), Guid inboxId = default(Guid), List<string> to = default(List<string>), Guid? domainId = default(Guid?), List<string> bcc = default(List<string>), List<string> cc = default(List<string>), bool read = default(bool), string bodyExcerpt = default(string), bool teamAccess = default(bool), string bodyMD5Hash = default(string), string textExcerpt = default(string), string subject = default(string), Guid id = default(Guid), string from = default(string))
        {
            this.CreatedAt = createdAt;
            this.InboxId = inboxId;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for EmailProjection and cannot be null");
            }
            this.To = to;
            this.Read = read;
            this.TeamAccess = teamAccess;
            this.Id = id;
            this.Attachments = attachments;
            this.DomainId = domainId;
            this.Bcc = bcc;
            this.Cc = cc;
            this.BodyExcerpt = bodyExcerpt;
            this.BodyMD5Hash = bodyMD5Hash;
            this.TextExcerpt = textExcerpt;
            this.Subject = subject;
            this.From = from;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Attachments
        /// </summary>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets To
        /// </summary>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Gets or Sets DomainId
        /// </summary>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Gets or Sets Bcc
        /// </summary>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Gets or Sets Cc
        /// </summary>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// Gets or Sets Read
        /// </summary>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Gets or Sets BodyExcerpt
        /// </summary>
        [DataMember(Name = "bodyExcerpt", EmitDefaultValue = true)]
        public string BodyExcerpt { get; set; }

        /// <summary>
        /// Gets or Sets TeamAccess
        /// </summary>
        [DataMember(Name = "teamAccess", IsRequired = true, EmitDefaultValue = true)]
        public bool TeamAccess { get; set; }

        /// <summary>
        /// Gets or Sets BodyMD5Hash
        /// </summary>
        [DataMember(Name = "bodyMD5Hash", EmitDefaultValue = true)]
        public string BodyMD5Hash { get; set; }

        /// <summary>
        /// Gets or Sets TextExcerpt
        /// </summary>
        [DataMember(Name = "textExcerpt", EmitDefaultValue = true)]
        public string TextExcerpt { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets From
        /// </summary>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  BodyExcerpt: ").Append(BodyExcerpt).Append("\n");
            sb.Append("  TeamAccess: ").Append(TeamAccess).Append("\n");
            sb.Append("  BodyMD5Hash: ").Append(BodyMD5Hash).Append("\n");
            sb.Append("  TextExcerpt: ").Append(TextExcerpt).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailProjection);
        }

        /// <summary>
        /// Returns true if EmailProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                ) && 
                (
                    this.BodyExcerpt == input.BodyExcerpt ||
                    (this.BodyExcerpt != null &&
                    this.BodyExcerpt.Equals(input.BodyExcerpt))
                ) && 
                (
                    this.TeamAccess == input.TeamAccess ||
                    this.TeamAccess.Equals(input.TeamAccess)
                ) && 
                (
                    this.BodyMD5Hash == input.BodyMD5Hash ||
                    (this.BodyMD5Hash != null &&
                    this.BodyMD5Hash.Equals(input.BodyMD5Hash))
                ) && 
                (
                    this.TextExcerpt == input.TextExcerpt ||
                    (this.TextExcerpt != null &&
                    this.TextExcerpt.Equals(input.TextExcerpt))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                if (this.BodyExcerpt != null)
                {
                    hashCode = (hashCode * 59) + this.BodyExcerpt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.TeamAccess.GetHashCode();
                if (this.BodyMD5Hash != null)
                {
                    hashCode = (hashCode * 59) + this.BodyMD5Hash.GetHashCode();
                }
                if (this.TextExcerpt != null)
                {
                    hashCode = (hashCode * 59) + this.TextExcerpt.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailPreviewUrls.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// URLs for email body
    /// </summary>
    [DataContract(Name = "EmailPreviewUrls")]
    public partial class EmailPreviewUrls : IEquatable<EmailPreviewUrls>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailPreviewUrls" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailPreviewUrls() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailPreviewUrls" /> class.
        /// </summary>
        /// <param name="rawSmtpMessageUrl">rawSmtpMessageUrl (required).</param>
        /// <param name="plainHtmlBodyUrl">plainHtmlBodyUrl (required).</param>
        /// <param name="origin">origin (required).</param>
        public EmailPreviewUrls(string rawSmtpMessageUrl = default(string), string plainHtmlBodyUrl = default(string), string origin = default(string))
        {
            // to ensure "rawSmtpMessageUrl" is required (not null)
            if (rawSmtpMessageUrl == null)
            {
                throw new ArgumentNullException("rawSmtpMessageUrl is a required property for EmailPreviewUrls and cannot be null");
            }
            this.RawSmtpMessageUrl = rawSmtpMessageUrl;
            // to ensure "plainHtmlBodyUrl" is required (not null)
            if (plainHtmlBodyUrl == null)
            {
                throw new ArgumentNullException("plainHtmlBodyUrl is a required property for EmailPreviewUrls and cannot be null");
            }
            this.PlainHtmlBodyUrl = plainHtmlBodyUrl;
            // to ensure "origin" is required (not null)
            if (origin == null)
            {
                throw new ArgumentNullException("origin is a required property for EmailPreviewUrls and cannot be null");
            }
            this.Origin = origin;
        }

        /// <summary>
        /// Gets or Sets RawSmtpMessageUrl
        /// </summary>
        [DataMember(Name = "rawSmtpMessageUrl", IsRequired = true, EmitDefaultValue = true)]
        public string RawSmtpMessageUrl { get; set; }

        /// <summary>
        /// Gets or Sets PlainHtmlBodyUrl
        /// </summary>
        [DataMember(Name = "plainHtmlBodyUrl", IsRequired = true, EmitDefaultValue = true)]
        public string PlainHtmlBodyUrl { get; set; }

        /// <summary>
        /// Gets or Sets Origin
        /// </summary>
        [DataMember(Name = "origin", IsRequired = true, EmitDefaultValue = true)]
        public string Origin { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailPreviewUrls {\n");
            sb.Append("  RawSmtpMessageUrl: ").Append(RawSmtpMessageUrl).Append("\n");
            sb.Append("  PlainHtmlBodyUrl: ").Append(PlainHtmlBodyUrl).Append("\n");
            sb.Append("  Origin: ").Append(Origin).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailPreviewUrls);
        }

        /// <summary>
        /// Returns true if EmailPreviewUrls instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailPreviewUrls to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailPreviewUrls input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RawSmtpMessageUrl == input.RawSmtpMessageUrl ||
                    (this.RawSmtpMessageUrl != null &&
                    this.RawSmtpMessageUrl.Equals(input.RawSmtpMessageUrl))
                ) && 
                (
                    this.PlainHtmlBodyUrl == input.PlainHtmlBodyUrl ||
                    (this.PlainHtmlBodyUrl != null &&
                    this.PlainHtmlBodyUrl.Equals(input.PlainHtmlBodyUrl))
                ) && 
                (
                    this.Origin == input.Origin ||
                    (this.Origin != null &&
                    this.Origin.Equals(input.Origin))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RawSmtpMessageUrl != null)
                {
                    hashCode = (hashCode * 59) + this.RawSmtpMessageUrl.GetHashCode();
                }
                if (this.PlainHtmlBodyUrl != null)
                {
                    hashCode = (hashCode * 59) + this.PlainHtmlBodyUrl.GetHashCode();
                }
                if (this.Origin != null)
                {
                    hashCode = (hashCode * 59) + this.Origin.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Preview of an email message. For full message (including body and attachments) call the &#x60;getEmail&#x60; or other email endpoints with the provided email ID.
    /// </summary>
    [DataContract(Name = "EmailPreview")]
    public partial class EmailPreview : IEquatable<EmailPreview>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailPreview" /> class.
        /// </summary>
        /// <param name="id">ID of the email entity (required).</param>
        /// <param name="domainId">ID of the domain that received the email.</param>
        /// <param name="subject">The subject line of the email message as specified by SMTP subject header.</param>
        /// <param name="to">List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names. (required).</param>
        /// <param name="from">Who the email was sent from. An email address - see fromName for the sender name..</param>
        /// <param name="bcc">List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names..</param>
        /// <param name="cc">List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names..</param>
        /// <param name="createdAt">When was the email received by MailSlurp (required).</param>
        /// <param name="read">Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks. (required).</param>
        /// <param name="attachments">List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension..</param>
        public EmailPreview(Guid id = default(Guid), Guid? domainId = default(Guid?), string subject = default(string), List<string> to = default(List<string>), string from = default(string), List<string> bcc = default(List<string>), List<string> cc = default(List<string>), DateTime createdAt = default(DateTime), bool read = default(bool), List<string> attachments = default(List<string>))
        {
            this.Id = id;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for EmailPreview and cannot be null");
            }
            this.To = to;
            this.CreatedAt = createdAt;
            this.Read = read;
            this.DomainId = domainId;
            this.Subject = subject;
            this.From = from;
            this.Bcc = bcc;
            this.Cc = cc;
            this.Attachments = attachments;
        }

        /// <summary>
        /// ID of the email entity
        /// </summary>
        /// <value>ID of the email entity</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// ID of the domain that received the email
        /// </summary>
        /// <value>ID of the domain that received the email</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// The subject line of the email message as specified by SMTP subject header
        /// </summary>
        /// <value>The subject line of the email message as specified by SMTP subject header</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Who the email was sent from. An email address - see fromName for the sender name.
        /// </summary>
        /// <value>Who the email was sent from. An email address - see fromName for the sender name.</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// When was the email received by MailSlurp
        /// </summary>
        /// <value>When was the email received by MailSlurp</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks.
        /// </summary>
        /// <value>Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks.</value>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension.
        /// </summary>
        /// <value>List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension.</value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailPreview {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailPreview);
        }

        /// <summary>
        /// Returns true if EmailPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailLinksResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Links found in HTML
    /// </summary>
    [DataContract(Name = "EmailLinksResult")]
    public partial class EmailLinksResult : IEquatable<EmailLinksResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailLinksResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailLinksResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailLinksResult" /> class.
        /// </summary>
        /// <param name="links">links (required).</param>
        /// <param name="body">body (required).</param>
        public EmailLinksResult(List<string> links = default(List<string>), string body = default(string))
        {
            // to ensure "links" is required (not null)
            if (links == null)
            {
                throw new ArgumentNullException("links is a required property for EmailLinksResult and cannot be null");
            }
            this.Links = links;
            // to ensure "body" is required (not null)
            if (body == null)
            {
                throw new ArgumentNullException("body is a required property for EmailLinksResult and cannot be null");
            }
            this.Body = body;
        }

        /// <summary>
        /// Gets or Sets Links
        /// </summary>
        [DataMember(Name = "links", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Links { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", IsRequired = true, EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailLinksResult {\n");
            sb.Append("  Links: ").Append(Links).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailLinksResult);
        }

        /// <summary>
        /// Returns true if EmailLinksResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailLinksResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailLinksResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Links == input.Links ||
                    this.Links != null &&
                    input.Links != null &&
                    this.Links.SequenceEqual(input.Links)
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Links != null)
                {
                    hashCode = (hashCode * 59) + this.Links.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailHtmlDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailHtmlDto
    /// </summary>
    [DataContract(Name = "EmailHtmlDto")]
    public partial class EmailHtmlDto : IEquatable<EmailHtmlDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailHtmlDto" /> class.
        /// </summary>
        /// <param name="subject">subject.</param>
        /// <param name="body">body.</param>
        public EmailHtmlDto(string subject = default(string), string body = default(string))
        {
            this.Subject = subject;
            this.Body = body;
        }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Body
        /// </summary>
        [DataMember(Name = "body", EmitDefaultValue = false)]
        public string Body { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailHtmlDto {\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailHtmlDto);
        }

        /// <summary>
        /// Returns true if EmailHtmlDto instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailHtmlDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailHtmlDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureVersionStatistics.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureVersionStatistics
    /// </summary>
    [DataContract(Name = "EmailFeatureVersionStatistics")]
    public partial class EmailFeatureVersionStatistics : IEquatable<EmailFeatureVersionStatistics>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureVersionStatistics" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureVersionStatistics() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureVersionStatistics" /> class.
        /// </summary>
        /// <param name="version">version (required).</param>
        /// <param name="supportFlags">supportFlags (required).</param>
        public EmailFeatureVersionStatistics(string version = default(string), EmailFeatureSupportFlags supportFlags = default(EmailFeatureSupportFlags))
        {
            // to ensure "version" is required (not null)
            if (version == null)
            {
                throw new ArgumentNullException("version is a required property for EmailFeatureVersionStatistics and cannot be null");
            }
            this._Version = version;
            // to ensure "supportFlags" is required (not null)
            if (supportFlags == null)
            {
                throw new ArgumentNullException("supportFlags is a required property for EmailFeatureVersionStatistics and cannot be null");
            }
            this.SupportFlags = supportFlags;
        }

        /// <summary>
        /// Gets or Sets _Version
        /// </summary>
        [DataMember(Name = "version", IsRequired = true, EmitDefaultValue = true)]
        public string _Version { get; set; }

        /// <summary>
        /// Gets or Sets SupportFlags
        /// </summary>
        [DataMember(Name = "supportFlags", IsRequired = true, EmitDefaultValue = true)]
        public EmailFeatureSupportFlags SupportFlags { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureVersionStatistics {\n");
            sb.Append("  _Version: ").Append(_Version).Append("\n");
            sb.Append("  SupportFlags: ").Append(SupportFlags).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureVersionStatistics);
        }

        /// <summary>
        /// Returns true if EmailFeatureVersionStatistics instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureVersionStatistics to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureVersionStatistics input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this._Version == input._Version ||
                    (this._Version != null &&
                    this._Version.Equals(input._Version))
                ) && 
                (
                    this.SupportFlags == input.SupportFlags ||
                    (this.SupportFlags != null &&
                    this.SupportFlags.Equals(input.SupportFlags))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this._Version != null)
                {
                    hashCode = (hashCode * 59) + this._Version.GetHashCode();
                }
                if (this.SupportFlags != null)
                {
                    hashCode = (hashCode * 59) + this.SupportFlags.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureSupportStatusPercentage.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureSupportStatusPercentage
    /// </summary>
    [DataContract(Name = "EmailFeatureSupportStatusPercentage")]
    public partial class EmailFeatureSupportStatusPercentage : IEquatable<EmailFeatureSupportStatusPercentage>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUPPORTED for value: SUPPORTED
            /// </summary>
            [EnumMember(Value = "SUPPORTED")]
            SUPPORTED = 1,

            /// <summary>
            /// Enum PARTIAL for value: PARTIAL
            /// </summary>
            [EnumMember(Value = "PARTIAL")]
            PARTIAL = 2,

            /// <summary>
            /// Enum NOTSUPPORTED for value: NOT_SUPPORTED
            /// </summary>
            [EnumMember(Value = "NOT_SUPPORTED")]
            NOTSUPPORTED = 3,

            /// <summary>
            /// Enum UNKNOWN for value: UNKNOWN
            /// </summary>
            [EnumMember(Value = "UNKNOWN")]
            UNKNOWN = 4

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", IsRequired = true, EmitDefaultValue = true)]
        public StatusEnum Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportStatusPercentage" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureSupportStatusPercentage() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportStatusPercentage" /> class.
        /// </summary>
        /// <param name="status">status (required).</param>
        /// <param name="percentage">percentage (required).</param>
        public EmailFeatureSupportStatusPercentage(StatusEnum status = default(StatusEnum), float percentage = default(float))
        {
            this.Status = status;
            this.Percentage = percentage;
        }

        /// <summary>
        /// Gets or Sets Percentage
        /// </summary>
        [DataMember(Name = "percentage", IsRequired = true, EmitDefaultValue = true)]
        public float Percentage { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureSupportStatusPercentage {\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  Percentage: ").Append(Percentage).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureSupportStatusPercentage);
        }

        /// <summary>
        /// Returns true if EmailFeatureSupportStatusPercentage instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureSupportStatusPercentage to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureSupportStatusPercentage input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                ) && 
                (
                    this.Percentage == input.Percentage ||
                    this.Percentage.Equals(input.Percentage)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                hashCode = (hashCode * 59) + this.Percentage.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureSupportResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureSupportResult
    /// </summary>
    [DataContract(Name = "EmailFeatureSupportResult")]
    public partial class EmailFeatureSupportResult : IEquatable<EmailFeatureSupportResult>, IValidatableObject
    {
        /// <summary>
        /// Defines DetectedFeatures
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DetectedFeaturesEnum
        {
            /// <summary>
            /// Enum Amp for value: amp
            /// </summary>
            [EnumMember(Value = "amp")]
            Amp = 1,

            /// <summary>
            /// Enum CssAccentColor for value: css-accent-color
            /// </summary>
            [EnumMember(Value = "css-accent-color")]
            CssAccentColor = 2,

            /// <summary>
            /// Enum CssAlignItems for value: css-align-items
            /// </summary>
            [EnumMember(Value = "css-align-items")]
            CssAlignItems = 3,

            /// <summary>
            /// Enum CssAnimation for value: css-animation
            /// </summary>
            [EnumMember(Value = "css-animation")]
            CssAnimation = 4,

            /// <summary>
            /// Enum CssAspectRatio for value: css-aspect-ratio
            /// </summary>
            [EnumMember(Value = "css-aspect-ratio")]
            CssAspectRatio = 5,

            /// <summary>
            /// Enum CssAtFontFace for value: css-at-font-face
            /// </summary>
            [EnumMember(Value = "css-at-font-face")]
            CssAtFontFace = 6,

            /// <summary>
            /// Enum CssAtImport for value: css-at-import
            /// </summary>
            [EnumMember(Value = "css-at-import")]
            CssAtImport = 7,

            /// <summary>
            /// Enum CssAtKeyframes for value: css-at-keyframes
            /// </summary>
            [EnumMember(Value = "css-at-keyframes")]
            CssAtKeyframes = 8,

            /// <summary>
            /// Enum CssAtMedia for value: css-at-media
            /// </summary>
            [EnumMember(Value = "css-at-media")]
            CssAtMedia = 9,

            /// <summary>
            /// Enum CssAtSupports for value: css-at-supports
            /// </summary>
            [EnumMember(Value = "css-at-supports")]
            CssAtSupports = 10,

            /// <summary>
            /// Enum CssBackgroundBlendMode for value: css-background-blend-mode
            /// </summary>
            [EnumMember(Value = "css-background-blend-mode")]
            CssBackgroundBlendMode = 11,

            /// <summary>
            /// Enum CssBackgroundClip for value: css-background-clip
            /// </summary>
            [EnumMember(Value = "css-background-clip")]
            CssBackgroundClip = 12,

            /// <summary>
            /// Enum CssBackgroundColor for value: css-background-color
            /// </summary>
            [EnumMember(Value = "css-background-color")]
            CssBackgroundColor = 13,

            /// <summary>
            /// Enum CssBackgroundImage for value: css-background-image
            /// </summary>
            [EnumMember(Value = "css-background-image")]
            CssBackgroundImage = 14,

            /// <summary>
            /// Enum CssBackgroundOrigin for value: css-background-origin
            /// </summary>
            [EnumMember(Value = "css-background-origin")]
            CssBackgroundOrigin = 15,

            /// <summary>
            /// Enum CssBackgroundPosition for value: css-background-position
            /// </summary>
            [EnumMember(Value = "css-background-position")]
            CssBackgroundPosition = 16,

            /// <summary>
            /// Enum CssBackgroundRepeat for value: css-background-repeat
            /// </summary>
            [EnumMember(Value = "css-background-repeat")]
            CssBackgroundRepeat = 17,

            /// <summary>
            /// Enum CssBackgroundSize for value: css-background-size
            /// </summary>
            [EnumMember(Value = "css-background-size")]
            CssBackgroundSize = 18,

            /// <summary>
            /// Enum CssBackground for value: css-background
            /// </summary>
            [EnumMember(Value = "css-background")]
            CssBackground = 19,

            /// <summary>
            /// Enum CssBlockInlineSize for value: css-block-inline-size
            /// </summary>
            [EnumMember(Value = "css-block-inline-size")]
            CssBlockInlineSize = 20,

            /// <summary>
            /// Enum CssBorderImage for value: css-border-image
            /// </summary>
            [EnumMember(Value = "css-border-image")]
            CssBorderImage = 21,

            /// <summary>
            /// Enum CssBorderInlineBlockIndividual for value: css-border-inline-block-individual
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-individual")]
            CssBorderInlineBlockIndividual = 22,

            /// <summary>
            /// Enum CssBorderInlineBlockLonghand for value: css-border-inline-block-longhand
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-longhand")]
            CssBorderInlineBlockLonghand = 23,

            /// <summary>
            /// Enum CssBorderInlineBlock for value: css-border-inline-block
            /// </summary>
            [EnumMember(Value = "css-border-inline-block")]
            CssBorderInlineBlock = 24,

            /// <summary>
            /// Enum CssBorderRadiusLogical for value: css-border-radius-logical
            /// </summary>
            [EnumMember(Value = "css-border-radius-logical")]
            CssBorderRadiusLogical = 25,

            /// <summary>
            /// Enum CssBorderRadius for value: css-border-radius
            /// </summary>
            [EnumMember(Value = "css-border-radius")]
            CssBorderRadius = 26,

            /// <summary>
            /// Enum CssBorder for value: css-border
            /// </summary>
            [EnumMember(Value = "css-border")]
            CssBorder = 27,

            /// <summary>
            /// Enum CssBoxShadow for value: css-box-shadow
            /// </summary>
            [EnumMember(Value = "css-box-shadow")]
            CssBoxShadow = 28,

            /// <summary>
            /// Enum CssBoxSizing for value: css-box-sizing
            /// </summary>
            [EnumMember(Value = "css-box-sizing")]
            CssBoxSizing = 29,

            /// <summary>
            /// Enum CssCaptionSide for value: css-caption-side
            /// </summary>
            [EnumMember(Value = "css-caption-side")]
            CssCaptionSide = 30,

            /// <summary>
            /// Enum CssClipPath for value: css-clip-path
            /// </summary>
            [EnumMember(Value = "css-clip-path")]
            CssClipPath = 31,

            /// <summary>
            /// Enum CssColumnCount for value: css-column-count
            /// </summary>
            [EnumMember(Value = "css-column-count")]
            CssColumnCount = 32,

            /// <summary>
            /// Enum CssColumnLayoutProperties for value: css-column-layout-properties
            /// </summary>
            [EnumMember(Value = "css-column-layout-properties")]
            CssColumnLayoutProperties = 33,

            /// <summary>
            /// Enum CssDirection for value: css-direction
            /// </summary>
            [EnumMember(Value = "css-direction")]
            CssDirection = 34,

            /// <summary>
            /// Enum CssDisplayFlex for value: css-display-flex
            /// </summary>
            [EnumMember(Value = "css-display-flex")]
            CssDisplayFlex = 35,

            /// <summary>
            /// Enum CssDisplayGrid for value: css-display-grid
            /// </summary>
            [EnumMember(Value = "css-display-grid")]
            CssDisplayGrid = 36,

            /// <summary>
            /// Enum CssDisplayNone for value: css-display-none
            /// </summary>
            [EnumMember(Value = "css-display-none")]
            CssDisplayNone = 37,

            /// <summary>
            /// Enum CssDisplay for value: css-display
            /// </summary>
            [EnumMember(Value = "css-display")]
            CssDisplay = 38,

            /// <summary>
            /// Enum CssFilter for value: css-filter
            /// </summary>
            [EnumMember(Value = "css-filter")]
            CssFilter = 39,

            /// <summary>
            /// Enum CssFlexDirection for value: css-flex-direction
            /// </summary>
            [EnumMember(Value = "css-flex-direction")]
            CssFlexDirection = 40,

            /// <summary>
            /// Enum CssFlexWrap for value: css-flex-wrap
            /// </summary>
            [EnumMember(Value = "css-flex-wrap")]
            CssFlexWrap = 41,

            /// <summary>
            /// Enum CssFloat for value: css-float
            /// </summary>
            [EnumMember(Value = "css-float")]
            CssFloat = 42,

            /// <summary>
            /// Enum CssFontKerning for value: css-font-kerning
            /// </summary>
            [EnumMember(Value = "css-font-kerning")]
            CssFontKerning = 43,

            /// <summary>
            /// Enum CssFontWeight for value: css-font-weight
            /// </summary>
            [EnumMember(Value = "css-font-weight")]
            CssFontWeight = 44,

            /// <summary>
            /// Enum CssFont for value: css-font
            /// </summary>
            [EnumMember(Value = "css-font")]
            CssFont = 45,

            /// <summary>
            /// Enum CssGap for value: css-gap
            /// </summary>
            [EnumMember(Value = "css-gap")]
            CssGap = 46,

            /// <summary>
            /// Enum CssGridTemplate for value: css-grid-template
            /// </summary>
            [EnumMember(Value = "css-grid-template")]
            CssGridTemplate = 47,

            /// <summary>
            /// Enum CssHeight for value: css-height
            /// </summary>
            [EnumMember(Value = "css-height")]
            CssHeight = 48,

            /// <summary>
            /// Enum CssHyphens for value: css-hyphens
            /// </summary>
            [EnumMember(Value = "css-hyphens")]
            CssHyphens = 49,

            /// <summary>
            /// Enum CssInlineSize for value: css-inline-size
            /// </summary>
            [EnumMember(Value = "css-inline-size")]
            CssInlineSize = 50,

            /// <summary>
            /// Enum CssJustifyContent for value: css-justify-content
            /// </summary>
            [EnumMember(Value = "css-justify-content")]
            CssJustifyContent = 51,

            /// <summary>
            /// Enum CssLeftRightTopBottom for value: css-left-right-top-bottom
            /// </summary>
            [EnumMember(Value = "css-left-right-top-bottom")]
            CssLeftRightTopBottom = 52,

            /// <summary>
            /// Enum CssLetterSpacing for value: css-letter-spacing
            /// </summary>
            [EnumMember(Value = "css-letter-spacing")]
            CssLetterSpacing = 53,

            /// <summary>
            /// Enum CssLineHeight for value: css-line-height
            /// </summary>
            [EnumMember(Value = "css-line-height")]
            CssLineHeight = 54,

            /// <summary>
            /// Enum CssListStyleImage for value: css-list-style-image
            /// </summary>
            [EnumMember(Value = "css-list-style-image")]
            CssListStyleImage = 55,

            /// <summary>
            /// Enum CssListStylePosition for value: css-list-style-position
            /// </summary>
            [EnumMember(Value = "css-list-style-position")]
            CssListStylePosition = 56,

            /// <summary>
            /// Enum CssListStyleType for value: css-list-style-type
            /// </summary>
            [EnumMember(Value = "css-list-style-type")]
            CssListStyleType = 57,

            /// <summary>
            /// Enum CssListStyle for value: css-list-style
            /// </summary>
            [EnumMember(Value = "css-list-style")]
            CssListStyle = 58,

            /// <summary>
            /// Enum CssMarginBlockStartEnd for value: css-margin-block-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-block-start-end")]
            CssMarginBlockStartEnd = 59,

            /// <summary>
            /// Enum CssMarginInlineBlock for value: css-margin-inline-block
            /// </summary>
            [EnumMember(Value = "css-margin-inline-block")]
            CssMarginInlineBlock = 60,

            /// <summary>
            /// Enum CssMarginInlineStartEnd for value: css-margin-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-inline-start-end")]
            CssMarginInlineStartEnd = 61,

            /// <summary>
            /// Enum CssMarginInline for value: css-margin-inline
            /// </summary>
            [EnumMember(Value = "css-margin-inline")]
            CssMarginInline = 62,

            /// <summary>
            /// Enum CssMargin for value: css-margin
            /// </summary>
            [EnumMember(Value = "css-margin")]
            CssMargin = 63,

            /// <summary>
            /// Enum CssMaxBlockSize for value: css-max-block-size
            /// </summary>
            [EnumMember(Value = "css-max-block-size")]
            CssMaxBlockSize = 64,

            /// <summary>
            /// Enum CssMaxHeight for value: css-max-height
            /// </summary>
            [EnumMember(Value = "css-max-height")]
            CssMaxHeight = 65,

            /// <summary>
            /// Enum CssMaxWidth for value: css-max-width
            /// </summary>
            [EnumMember(Value = "css-max-width")]
            CssMaxWidth = 66,

            /// <summary>
            /// Enum CssMinHeight for value: css-min-height
            /// </summary>
            [EnumMember(Value = "css-min-height")]
            CssMinHeight = 67,

            /// <summary>
            /// Enum CssMinInlineSize for value: css-min-inline-size
            /// </summary>
            [EnumMember(Value = "css-min-inline-size")]
            CssMinInlineSize = 68,

            /// <summary>
            /// Enum CssMinWidth for value: css-min-width
            /// </summary>
            [EnumMember(Value = "css-min-width")]
            CssMinWidth = 69,

            /// <summary>
            /// Enum CssMixBlendMode for value: css-mix-blend-mode
            /// </summary>
            [EnumMember(Value = "css-mix-blend-mode")]
            CssMixBlendMode = 70,

            /// <summary>
            /// Enum CssObjectFit for value: css-object-fit
            /// </summary>
            [EnumMember(Value = "css-object-fit")]
            CssObjectFit = 71,

            /// <summary>
            /// Enum CssObjectPosition for value: css-object-position
            /// </summary>
            [EnumMember(Value = "css-object-position")]
            CssObjectPosition = 72,

            /// <summary>
            /// Enum CssOpacity for value: css-opacity
            /// </summary>
            [EnumMember(Value = "css-opacity")]
            CssOpacity = 73,

            /// <summary>
            /// Enum CssOutlineOffset for value: css-outline-offset
            /// </summary>
            [EnumMember(Value = "css-outline-offset")]
            CssOutlineOffset = 74,

            /// <summary>
            /// Enum CssOutline for value: css-outline
            /// </summary>
            [EnumMember(Value = "css-outline")]
            CssOutline = 75,

            /// <summary>
            /// Enum CssOverflowWrap for value: css-overflow-wrap
            /// </summary>
            [EnumMember(Value = "css-overflow-wrap")]
            CssOverflowWrap = 76,

            /// <summary>
            /// Enum CssOverflow for value: css-overflow
            /// </summary>
            [EnumMember(Value = "css-overflow")]
            CssOverflow = 77,

            /// <summary>
            /// Enum CssPaddingBlockStartEnd for value: css-padding-block-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-block-start-end")]
            CssPaddingBlockStartEnd = 78,

            /// <summary>
            /// Enum CssPaddingInlineBlock for value: css-padding-inline-block
            /// </summary>
            [EnumMember(Value = "css-padding-inline-block")]
            CssPaddingInlineBlock = 79,

            /// <summary>
            /// Enum CssPaddingInlineStartEnd for value: css-padding-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-inline-start-end")]
            CssPaddingInlineStartEnd = 80,

            /// <summary>
            /// Enum CssPadding for value: css-padding
            /// </summary>
            [EnumMember(Value = "css-padding")]
            CssPadding = 81,

            /// <summary>
            /// Enum CssPosition for value: css-position
            /// </summary>
            [EnumMember(Value = "css-position")]
            CssPosition = 82,

            /// <summary>
            /// Enum CssTabSize for value: css-tab-size
            /// </summary>
            [EnumMember(Value = "css-tab-size")]
            CssTabSize = 83,

            /// <summary>
            /// Enum CssTableLayout for value: css-table-layout
            /// </summary>
            [EnumMember(Value = "css-table-layout")]
            CssTableLayout = 84,

            /// <summary>
            /// Enum CssTextAlignLast for value: css-text-align-last
            /// </summary>
            [EnumMember(Value = "css-text-align-last")]
            CssTextAlignLast = 85,

            /// <summary>
            /// Enum CssTextAlign for value: css-text-align
            /// </summary>
            [EnumMember(Value = "css-text-align")]
            CssTextAlign = 86,

            /// <summary>
            /// Enum CssTextDecorationColor for value: css-text-decoration-color
            /// </summary>
            [EnumMember(Value = "css-text-decoration-color")]
            CssTextDecorationColor = 87,

            /// <summary>
            /// Enum CssTextDecorationThickness for value: css-text-decoration-thickness
            /// </summary>
            [EnumMember(Value = "css-text-decoration-thickness")]
            CssTextDecorationThickness = 88,

            /// <summary>
            /// Enum CssTextDecoration for value: css-text-decoration
            /// </summary>
            [EnumMember(Value = "css-text-decoration")]
            CssTextDecoration = 89,

            /// <summary>
            /// Enum CssTextEmphasisPosition for value: css-text-emphasis-position
            /// </summary>
            [EnumMember(Value = "css-text-emphasis-position")]
            CssTextEmphasisPosition = 90,

            /// <summary>
            /// Enum CssTextEmphasis for value: css-text-emphasis
            /// </summary>
            [EnumMember(Value = "css-text-emphasis")]
            CssTextEmphasis = 91,

            /// <summary>
            /// Enum CssTextIndent for value: css-text-indent
            /// </summary>
            [EnumMember(Value = "css-text-indent")]
            CssTextIndent = 92,

            /// <summary>
            /// Enum CssTextOverflow for value: css-text-overflow
            /// </summary>
            [EnumMember(Value = "css-text-overflow")]
            CssTextOverflow = 93,

            /// <summary>
            /// Enum CssTextShadow for value: css-text-shadow
            /// </summary>
            [EnumMember(Value = "css-text-shadow")]
            CssTextShadow = 94,

            /// <summary>
            /// Enum CssTextTransform for value: css-text-transform
            /// </summary>
            [EnumMember(Value = "css-text-transform")]
            CssTextTransform = 95,

            /// <summary>
            /// Enum CssTextUnderlineOffset for value: css-text-underline-offset
            /// </summary>
            [EnumMember(Value = "css-text-underline-offset")]
            CssTextUnderlineOffset = 96,

            /// <summary>
            /// Enum CssTransform for value: css-transform
            /// </summary>
            [EnumMember(Value = "css-transform")]
            CssTransform = 97,

            /// <summary>
            /// Enum CssVerticalAlign for value: css-vertical-align
            /// </summary>
            [EnumMember(Value = "css-vertical-align")]
            CssVerticalAlign = 98,

            /// <summary>
            /// Enum CssVisibility for value: css-visibility
            /// </summary>
            [EnumMember(Value = "css-visibility")]
            CssVisibility = 99,

            /// <summary>
            /// Enum CssWhiteSpace for value: css-white-space
            /// </summary>
            [EnumMember(Value = "css-white-space")]
            CssWhiteSpace = 100,

            /// <summary>
            /// Enum CssWidth for value: css-width
            /// </summary>
            [EnumMember(Value = "css-width")]
            CssWidth = 101,

            /// <summary>
            /// Enum CssWordBreak for value: css-word-break
            /// </summary>
            [EnumMember(Value = "css-word-break")]
            CssWordBreak = 102,

            /// <summary>
            /// Enum CssWritingMode for value: css-writing-mode
            /// </summary>
            [EnumMember(Value = "css-writing-mode")]
            CssWritingMode = 103,

            /// <summary>
            /// Enum CssZIndex for value: css-z-index
            /// </summary>
            [EnumMember(Value = "css-z-index")]
            CssZIndex = 104,

            /// <summary>
            /// Enum HtmlAbbr for value: html-abbr
            /// </summary>
            [EnumMember(Value = "html-abbr")]
            HtmlAbbr = 105,

            /// <summary>
            /// Enum HtmlAddress for value: html-address
            /// </summary>
            [EnumMember(Value = "html-address")]
            HtmlAddress = 106,

            /// <summary>
            /// Enum HtmlAlign for value: html-align
            /// </summary>
            [EnumMember(Value = "html-align")]
            HtmlAlign = 107,

            /// <summary>
            /// Enum HtmlAnchorLinks for value: html-anchor-links
            /// </summary>
            [EnumMember(Value = "html-anchor-links")]
            HtmlAnchorLinks = 108,

            /// <summary>
            /// Enum HtmlAriaDescribedby for value: html-aria-describedby
            /// </summary>
            [EnumMember(Value = "html-aria-describedby")]
            HtmlAriaDescribedby = 109,

            /// <summary>
            /// Enum HtmlAriaHidden for value: html-aria-hidden
            /// </summary>
            [EnumMember(Value = "html-aria-hidden")]
            HtmlAriaHidden = 110,

            /// <summary>
            /// Enum HtmlAriaLabel for value: html-aria-label
            /// </summary>
            [EnumMember(Value = "html-aria-label")]
            HtmlAriaLabel = 111,

            /// <summary>
            /// Enum HtmlAriaLabelledby for value: html-aria-labelledby
            /// </summary>
            [EnumMember(Value = "html-aria-labelledby")]
            HtmlAriaLabelledby = 112,

            /// <summary>
            /// Enum HtmlAriaLive for value: html-aria-live
            /// </summary>
            [EnumMember(Value = "html-aria-live")]
            HtmlAriaLive = 113,

            /// <summary>
            /// Enum HtmlAudio for value: html-audio
            /// </summary>
            [EnumMember(Value = "html-audio")]
            HtmlAudio = 114,

            /// <summary>
            /// Enum HtmlBackground for value: html-background
            /// </summary>
            [EnumMember(Value = "html-background")]
            HtmlBackground = 115,

            /// <summary>
            /// Enum HtmlBase for value: html-base
            /// </summary>
            [EnumMember(Value = "html-base")]
            HtmlBase = 116,

            /// <summary>
            /// Enum HtmlBlockquote for value: html-blockquote
            /// </summary>
            [EnumMember(Value = "html-blockquote")]
            HtmlBlockquote = 117,

            /// <summary>
            /// Enum HtmlBody for value: html-body
            /// </summary>
            [EnumMember(Value = "html-body")]
            HtmlBody = 118,

            /// <summary>
            /// Enum HtmlButtonReset for value: html-button-reset
            /// </summary>
            [EnumMember(Value = "html-button-reset")]
            HtmlButtonReset = 119,

            /// <summary>
            /// Enum HtmlButtonSubmit for value: html-button-submit
            /// </summary>
            [EnumMember(Value = "html-button-submit")]
            HtmlButtonSubmit = 120,

            /// <summary>
            /// Enum HtmlCode for value: html-code
            /// </summary>
            [EnumMember(Value = "html-code")]
            HtmlCode = 121,

            /// <summary>
            /// Enum HtmlDel for value: html-del
            /// </summary>
            [EnumMember(Value = "html-del")]
            HtmlDel = 122,

            /// <summary>
            /// Enum HtmlDfn for value: html-dfn
            /// </summary>
            [EnumMember(Value = "html-dfn")]
            HtmlDfn = 123,

            /// <summary>
            /// Enum HtmlDialog for value: html-dialog
            /// </summary>
            [EnumMember(Value = "html-dialog")]
            HtmlDialog = 124,

            /// <summary>
            /// Enum HtmlDir for value: html-dir
            /// </summary>
            [EnumMember(Value = "html-dir")]
            HtmlDir = 125,

            /// <summary>
            /// Enum HtmlDiv for value: html-div
            /// </summary>
            [EnumMember(Value = "html-div")]
            HtmlDiv = 126,

            /// <summary>
            /// Enum HtmlDoctype for value: html-doctype
            /// </summary>
            [EnumMember(Value = "html-doctype")]
            HtmlDoctype = 127,

            /// <summary>
            /// Enum HtmlForm for value: html-form
            /// </summary>
            [EnumMember(Value = "html-form")]
            HtmlForm = 128,

            /// <summary>
            /// Enum HtmlH1H6 for value: html-h1-h6
            /// </summary>
            [EnumMember(Value = "html-h1-h6")]
            HtmlH1H6 = 129,

            /// <summary>
            /// Enum HtmlHeight for value: html-height
            /// </summary>
            [EnumMember(Value = "html-height")]
            HtmlHeight = 130,

            /// <summary>
            /// Enum HtmlImageMaps for value: html-image-maps
            /// </summary>
            [EnumMember(Value = "html-image-maps")]
            HtmlImageMaps = 131,

            /// <summary>
            /// Enum HtmlInputCheckbox for value: html-input-checkbox
            /// </summary>
            [EnumMember(Value = "html-input-checkbox")]
            HtmlInputCheckbox = 132,

            /// <summary>
            /// Enum HtmlInputHidden for value: html-input-hidden
            /// </summary>
            [EnumMember(Value = "html-input-hidden")]
            HtmlInputHidden = 133,

            /// <summary>
            /// Enum HtmlInputRadio for value: html-input-radio
            /// </summary>
            [EnumMember(Value = "html-input-radio")]
            HtmlInputRadio = 134,

            /// <summary>
            /// Enum HtmlInputReset for value: html-input-reset
            /// </summary>
            [EnumMember(Value = "html-input-reset")]
            HtmlInputReset = 135,

            /// <summary>
            /// Enum HtmlInputSubmit for value: html-input-submit
            /// </summary>
            [EnumMember(Value = "html-input-submit")]
            HtmlInputSubmit = 136,

            /// <summary>
            /// Enum HtmlInputText for value: html-input-text
            /// </summary>
            [EnumMember(Value = "html-input-text")]
            HtmlInputText = 137,

            /// <summary>
            /// Enum HtmlLang for value: html-lang
            /// </summary>
            [EnumMember(Value = "html-lang")]
            HtmlLang = 138,

            /// <summary>
            /// Enum HtmlLink for value: html-link
            /// </summary>
            [EnumMember(Value = "html-link")]
            HtmlLink = 139,

            /// <summary>
            /// Enum HtmlLists for value: html-lists
            /// </summary>
            [EnumMember(Value = "html-lists")]
            HtmlLists = 140,

            /// <summary>
            /// Enum HtmlLoadingAttribute for value: html-loading-attribute
            /// </summary>
            [EnumMember(Value = "html-loading-attribute")]
            HtmlLoadingAttribute = 141,

            /// <summary>
            /// Enum HtmlMailtoLinks for value: html-mailto-links
            /// </summary>
            [EnumMember(Value = "html-mailto-links")]
            HtmlMailtoLinks = 142,

            /// <summary>
            /// Enum HtmlMarquee for value: html-marquee
            /// </summary>
            [EnumMember(Value = "html-marquee")]
            HtmlMarquee = 143,

            /// <summary>
            /// Enum HtmlMeter for value: html-meter
            /// </summary>
            [EnumMember(Value = "html-meter")]
            HtmlMeter = 144,

            /// <summary>
            /// Enum HtmlObject for value: html-object
            /// </summary>
            [EnumMember(Value = "html-object")]
            HtmlObject = 145,

            /// <summary>
            /// Enum HtmlP for value: html-p
            /// </summary>
            [EnumMember(Value = "html-p")]
            HtmlP = 146,

            /// <summary>
            /// Enum HtmlPicture for value: html-picture
            /// </summary>
            [EnumMember(Value = "html-picture")]
            HtmlPicture = 147,

            /// <summary>
            /// Enum HtmlPre for value: html-pre
            /// </summary>
            [EnumMember(Value = "html-pre")]
            HtmlPre = 148,

            /// <summary>
            /// Enum HtmlProgress for value: html-progress
            /// </summary>
            [EnumMember(Value = "html-progress")]
            HtmlProgress = 149,

            /// <summary>
            /// Enum HtmlRequired for value: html-required
            /// </summary>
            [EnumMember(Value = "html-required")]
            HtmlRequired = 150,

            /// <summary>
            /// Enum HtmlRole for value: html-role
            /// </summary>
            [EnumMember(Value = "html-role")]
            HtmlRole = 151,

            /// <summary>
            /// Enum HtmlRp for value: html-rp
            /// </summary>
            [EnumMember(Value = "html-rp")]
            HtmlRp = 152,

            /// <summary>
            /// Enum HtmlRt for value: html-rt
            /// </summary>
            [EnumMember(Value = "html-rt")]
            HtmlRt = 153,

            /// <summary>
            /// Enum HtmlRuby for value: html-ruby
            /// </summary>
            [EnumMember(Value = "html-ruby")]
            HtmlRuby = 154,

            /// <summary>
            /// Enum HtmlSelect for value: html-select
            /// </summary>
            [EnumMember(Value = "html-select")]
            HtmlSelect = 155,

            /// <summary>
            /// Enum HtmlSemantics for value: html-semantics
            /// </summary>
            [EnumMember(Value = "html-semantics")]
            HtmlSemantics = 156,

            /// <summary>
            /// Enum HtmlSmall for value: html-small
            /// </summary>
            [EnumMember(Value = "html-small")]
            HtmlSmall = 157,

            /// <summary>
            /// Enum HtmlSpan for value: html-span
            /// </summary>
            [EnumMember(Value = "html-span")]
            HtmlSpan = 158,

            /// <summary>
            /// Enum HtmlSrcset for value: html-srcset
            /// </summary>
            [EnumMember(Value = "html-srcset")]
            HtmlSrcset = 159,

            /// <summary>
            /// Enum HtmlStrike for value: html-strike
            /// </summary>
            [EnumMember(Value = "html-strike")]
            HtmlStrike = 160,

            /// <summary>
            /// Enum HtmlStrong for value: html-strong
            /// </summary>
            [EnumMember(Value = "html-strong")]
            HtmlStrong = 161,

            /// <summary>
            /// Enum HtmlStyle for value: html-style
            /// </summary>
            [EnumMember(Value = "html-style")]
            HtmlStyle = 162,

            /// <summary>
            /// Enum HtmlSvg for value: html-svg
            /// </summary>
            [EnumMember(Value = "html-svg")]
            HtmlSvg = 163,

            /// <summary>
            /// Enum HtmlTable for value: html-table
            /// </summary>
            [EnumMember(Value = "html-table")]
            HtmlTable = 164,

            /// <summary>
            /// Enum HtmlTarget for value: html-target
            /// </summary>
            [EnumMember(Value = "html-target")]
            HtmlTarget = 165,

            /// <summary>
            /// Enum HtmlTextarea for value: html-textarea
            /// </summary>
            [EnumMember(Value = "html-textarea")]
            HtmlTextarea = 166,

            /// <summary>
            /// Enum HtmlValign for value: html-valign
            /// </summary>
            [EnumMember(Value = "html-valign")]
            HtmlValign = 167,

            /// <summary>
            /// Enum HtmlVideo for value: html-video
            /// </summary>
            [EnumMember(Value = "html-video")]
            HtmlVideo = 168,

            /// <summary>
            /// Enum HtmlWbr for value: html-wbr
            /// </summary>
            [EnumMember(Value = "html-wbr")]
            HtmlWbr = 169,

            /// <summary>
            /// Enum HtmlWidth for value: html-width
            /// </summary>
            [EnumMember(Value = "html-width")]
            HtmlWidth = 170,

            /// <summary>
            /// Enum ImageAvif for value: image-avif
            /// </summary>
            [EnumMember(Value = "image-avif")]
            ImageAvif = 171,

            /// <summary>
            /// Enum ImageBase64 for value: image-base64
            /// </summary>
            [EnumMember(Value = "image-base64")]
            ImageBase64 = 172,

            /// <summary>
            /// Enum ImageBmp for value: image-bmp
            /// </summary>
            [EnumMember(Value = "image-bmp")]
            ImageBmp = 173,

            /// <summary>
            /// Enum ImageGif for value: image-gif
            /// </summary>
            [EnumMember(Value = "image-gif")]
            ImageGif = 174,

            /// <summary>
            /// Enum ImageIco for value: image-ico
            /// </summary>
            [EnumMember(Value = "image-ico")]
            ImageIco = 175,

            /// <summary>
            /// Enum ImageJpg for value: image-jpg
            /// </summary>
            [EnumMember(Value = "image-jpg")]
            ImageJpg = 176,

            /// <summary>
            /// Enum ImagePng for value: image-png
            /// </summary>
            [EnumMember(Value = "image-png")]
            ImagePng = 177,

            /// <summary>
            /// Enum ImageSvg for value: image-svg
            /// </summary>
            [EnumMember(Value = "image-svg")]
            ImageSvg = 178,

            /// <summary>
            /// Enum ImageWebp for value: image-webp
            /// </summary>
            [EnumMember(Value = "image-webp")]
            ImageWebp = 179,

            /// <summary>
            /// Enum Unsupported for value: unsupported
            /// </summary>
            [EnumMember(Value = "unsupported")]
            Unsupported = 180

        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureSupportResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportResult" /> class.
        /// </summary>
        /// <param name="names">names (required).</param>
        /// <param name="detectedFeatures">detectedFeatures (required).</param>
        /// <param name="featureOverviews">featureOverviews (required).</param>
        /// <param name="featurePercentages">featurePercentages (required).</param>
        public EmailFeatureSupportResult(EmailFeatureNames names = default(EmailFeatureNames), List<DetectedFeaturesEnum> detectedFeatures = default(List<DetectedFeaturesEnum>), List<EmailFeatureOverview> featureOverviews = default(List<EmailFeatureOverview>), List<EmailFeatureSupportStatusPercentage> featurePercentages = default(List<EmailFeatureSupportStatusPercentage>))
        {
            // to ensure "names" is required (not null)
            if (names == null)
            {
                throw new ArgumentNullException("names is a required property for EmailFeatureSupportResult and cannot be null");
            }
            this.Names = names;
            // to ensure "detectedFeatures" is required (not null)
            if (detectedFeatures == null)
            {
                throw new ArgumentNullException("detectedFeatures is a required property for EmailFeatureSupportResult and cannot be null");
            }
            this.DetectedFeatures = detectedFeatures;
            // to ensure "featureOverviews" is required (not null)
            if (featureOverviews == null)
            {
                throw new ArgumentNullException("featureOverviews is a required property for EmailFeatureSupportResult and cannot be null");
            }
            this.FeatureOverviews = featureOverviews;
            // to ensure "featurePercentages" is required (not null)
            if (featurePercentages == null)
            {
                throw new ArgumentNullException("featurePercentages is a required property for EmailFeatureSupportResult and cannot be null");
            }
            this.FeaturePercentages = featurePercentages;
        }

        /// <summary>
        /// Gets or Sets Names
        /// </summary>
        [DataMember(Name = "names", IsRequired = true, EmitDefaultValue = true)]
        public EmailFeatureNames Names { get; set; }

        /// <summary>
        /// Gets or Sets DetectedFeatures
        /// </summary>
        [DataMember(Name = "detectedFeatures", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureSupportResult.DetectedFeaturesEnum> DetectedFeatures { get; set; }

        /// <summary>
        /// Gets or Sets FeatureOverviews
        /// </summary>
        [DataMember(Name = "featureOverviews", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureOverview> FeatureOverviews { get; set; }

        /// <summary>
        /// Gets or Sets FeaturePercentages
        /// </summary>
        [DataMember(Name = "featurePercentages", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureSupportStatusPercentage> FeaturePercentages { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureSupportResult {\n");
            sb.Append("  Names: ").Append(Names).Append("\n");
            sb.Append("  DetectedFeatures: ").Append(DetectedFeatures).Append("\n");
            sb.Append("  FeatureOverviews: ").Append(FeatureOverviews).Append("\n");
            sb.Append("  FeaturePercentages: ").Append(FeaturePercentages).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureSupportResult);
        }

        /// <summary>
        /// Returns true if EmailFeatureSupportResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureSupportResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureSupportResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Names == input.Names ||
                    (this.Names != null &&
                    this.Names.Equals(input.Names))
                ) && 
                (
                    this.DetectedFeatures == input.DetectedFeatures ||
                    this.DetectedFeatures != null &&
                    input.DetectedFeatures != null &&
                    this.DetectedFeatures.SequenceEqual(input.DetectedFeatures)
                ) && 
                (
                    this.FeatureOverviews == input.FeatureOverviews ||
                    this.FeatureOverviews != null &&
                    input.FeatureOverviews != null &&
                    this.FeatureOverviews.SequenceEqual(input.FeatureOverviews)
                ) && 
                (
                    this.FeaturePercentages == input.FeaturePercentages ||
                    this.FeaturePercentages != null &&
                    input.FeaturePercentages != null &&
                    this.FeaturePercentages.SequenceEqual(input.FeaturePercentages)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Names != null)
                {
                    hashCode = (hashCode * 59) + this.Names.GetHashCode();
                }
                if (this.DetectedFeatures != null)
                {
                    hashCode = (hashCode * 59) + this.DetectedFeatures.GetHashCode();
                }
                if (this.FeatureOverviews != null)
                {
                    hashCode = (hashCode * 59) + this.FeatureOverviews.GetHashCode();
                }
                if (this.FeaturePercentages != null)
                {
                    hashCode = (hashCode * 59) + this.FeaturePercentages.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureSupportFlags.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureSupportFlags
    /// </summary>
    [DataContract(Name = "EmailFeatureSupportFlags")]
    public partial class EmailFeatureSupportFlags : IEquatable<EmailFeatureSupportFlags>, IValidatableObject
    {
        /// <summary>
        /// Defines Status
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusEnum
        {
            /// <summary>
            /// Enum SUPPORTED for value: SUPPORTED
            /// </summary>
            [EnumMember(Value = "SUPPORTED")]
            SUPPORTED = 1,

            /// <summary>
            /// Enum PARTIAL for value: PARTIAL
            /// </summary>
            [EnumMember(Value = "PARTIAL")]
            PARTIAL = 2,

            /// <summary>
            /// Enum NOTSUPPORTED for value: NOT_SUPPORTED
            /// </summary>
            [EnumMember(Value = "NOT_SUPPORTED")]
            NOTSUPPORTED = 3,

            /// <summary>
            /// Enum UNKNOWN for value: UNKNOWN
            /// </summary>
            [EnumMember(Value = "UNKNOWN")]
            UNKNOWN = 4

        }


        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", IsRequired = true, EmitDefaultValue = true)]
        public StatusEnum Status { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportFlags" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureSupportFlags() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureSupportFlags" /> class.
        /// </summary>
        /// <param name="status">status (required).</param>
        /// <param name="notes">notes.</param>
        public EmailFeatureSupportFlags(StatusEnum status = default(StatusEnum), List<string> notes = default(List<string>))
        {
            this.Status = status;
            this.Notes = notes;
        }

        /// <summary>
        /// Gets or Sets Notes
        /// </summary>
        [DataMember(Name = "notes", EmitDefaultValue = false)]
        public List<string> Notes { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureSupportFlags {\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  Notes: ").Append(Notes).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureSupportFlags);
        }

        /// <summary>
        /// Returns true if EmailFeatureSupportFlags instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureSupportFlags to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureSupportFlags input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Status == input.Status ||
                    this.Status.Equals(input.Status)
                ) && 
                (
                    this.Notes == input.Notes ||
                    this.Notes != null &&
                    input.Notes != null &&
                    this.Notes.SequenceEqual(input.Notes)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Status.GetHashCode();
                if (this.Notes != null)
                {
                    hashCode = (hashCode * 59) + this.Notes.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeaturePlatformStatistics.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeaturePlatformStatistics
    /// </summary>
    [DataContract(Name = "EmailFeaturePlatformStatistics")]
    public partial class EmailFeaturePlatformStatistics : IEquatable<EmailFeaturePlatformStatistics>, IValidatableObject
    {
        /// <summary>
        /// Defines Platform
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PlatformEnum
        {
            /// <summary>
            /// Enum Android for value: android
            /// </summary>
            [EnumMember(Value = "android")]
            Android = 1,

            /// <summary>
            /// Enum DesktopApp for value: desktop-app
            /// </summary>
            [EnumMember(Value = "desktop-app")]
            DesktopApp = 2,

            /// <summary>
            /// Enum DesktopWebmail for value: desktop-webmail
            /// </summary>
            [EnumMember(Value = "desktop-webmail")]
            DesktopWebmail = 3,

            /// <summary>
            /// Enum Ios for value: ios
            /// </summary>
            [EnumMember(Value = "ios")]
            Ios = 4,

            /// <summary>
            /// Enum Macos for value: macos
            /// </summary>
            [EnumMember(Value = "macos")]
            Macos = 5,

            /// <summary>
            /// Enum MobileWebmail for value: mobile-webmail
            /// </summary>
            [EnumMember(Value = "mobile-webmail")]
            MobileWebmail = 6,

            /// <summary>
            /// Enum OutlookCom for value: outlook-com
            /// </summary>
            [EnumMember(Value = "outlook-com")]
            OutlookCom = 7,

            /// <summary>
            /// Enum Webmail for value: webmail
            /// </summary>
            [EnumMember(Value = "webmail")]
            Webmail = 8,

            /// <summary>
            /// Enum Windows for value: windows
            /// </summary>
            [EnumMember(Value = "windows")]
            Windows = 9,

            /// <summary>
            /// Enum WindowsMail for value: windows-mail
            /// </summary>
            [EnumMember(Value = "windows-mail")]
            WindowsMail = 10

        }


        /// <summary>
        /// Gets or Sets Platform
        /// </summary>
        [DataMember(Name = "platform", IsRequired = true, EmitDefaultValue = true)]
        public PlatformEnum Platform { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeaturePlatformStatistics" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeaturePlatformStatistics() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeaturePlatformStatistics" /> class.
        /// </summary>
        /// <param name="platform">platform (required).</param>
        /// <param name="versions">versions (required).</param>
        public EmailFeaturePlatformStatistics(PlatformEnum platform = default(PlatformEnum), List<EmailFeatureVersionStatistics> versions = default(List<EmailFeatureVersionStatistics>))
        {
            this.Platform = platform;
            // to ensure "versions" is required (not null)
            if (versions == null)
            {
                throw new ArgumentNullException("versions is a required property for EmailFeaturePlatformStatistics and cannot be null");
            }
            this.Versions = versions;
        }

        /// <summary>
        /// Gets or Sets Versions
        /// </summary>
        [DataMember(Name = "versions", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureVersionStatistics> Versions { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeaturePlatformStatistics {\n");
            sb.Append("  Platform: ").Append(Platform).Append("\n");
            sb.Append("  Versions: ").Append(Versions).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeaturePlatformStatistics);
        }

        /// <summary>
        /// Returns true if EmailFeaturePlatformStatistics instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeaturePlatformStatistics to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeaturePlatformStatistics input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Platform == input.Platform ||
                    this.Platform.Equals(input.Platform)
                ) && 
                (
                    this.Versions == input.Versions ||
                    this.Versions != null &&
                    input.Versions != null &&
                    this.Versions.SequenceEqual(input.Versions)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Platform.GetHashCode();
                if (this.Versions != null)
                {
                    hashCode = (hashCode * 59) + this.Versions.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeaturePlatformName.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeaturePlatformName
    /// </summary>
    [DataContract(Name = "EmailFeaturePlatformName")]
    public partial class EmailFeaturePlatformName : IEquatable<EmailFeaturePlatformName>, IValidatableObject
    {
        /// <summary>
        /// Defines Slug
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SlugEnum
        {
            /// <summary>
            /// Enum Android for value: android
            /// </summary>
            [EnumMember(Value = "android")]
            Android = 1,

            /// <summary>
            /// Enum DesktopApp for value: desktop-app
            /// </summary>
            [EnumMember(Value = "desktop-app")]
            DesktopApp = 2,

            /// <summary>
            /// Enum DesktopWebmail for value: desktop-webmail
            /// </summary>
            [EnumMember(Value = "desktop-webmail")]
            DesktopWebmail = 3,

            /// <summary>
            /// Enum Ios for value: ios
            /// </summary>
            [EnumMember(Value = "ios")]
            Ios = 4,

            /// <summary>
            /// Enum Macos for value: macos
            /// </summary>
            [EnumMember(Value = "macos")]
            Macos = 5,

            /// <summary>
            /// Enum MobileWebmail for value: mobile-webmail
            /// </summary>
            [EnumMember(Value = "mobile-webmail")]
            MobileWebmail = 6,

            /// <summary>
            /// Enum OutlookCom for value: outlook-com
            /// </summary>
            [EnumMember(Value = "outlook-com")]
            OutlookCom = 7,

            /// <summary>
            /// Enum Webmail for value: webmail
            /// </summary>
            [EnumMember(Value = "webmail")]
            Webmail = 8,

            /// <summary>
            /// Enum Windows for value: windows
            /// </summary>
            [EnumMember(Value = "windows")]
            Windows = 9,

            /// <summary>
            /// Enum WindowsMail for value: windows-mail
            /// </summary>
            [EnumMember(Value = "windows-mail")]
            WindowsMail = 10

        }


        /// <summary>
        /// Gets or Sets Slug
        /// </summary>
        [DataMember(Name = "slug", IsRequired = true, EmitDefaultValue = true)]
        public SlugEnum Slug { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeaturePlatformName" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeaturePlatformName() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeaturePlatformName" /> class.
        /// </summary>
        /// <param name="slug">slug (required).</param>
        /// <param name="name">name (required).</param>
        public EmailFeaturePlatformName(SlugEnum slug = default(SlugEnum), string name = default(string))
        {
            this.Slug = slug;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for EmailFeaturePlatformName and cannot be null");
            }
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeaturePlatformName {\n");
            sb.Append("  Slug: ").Append(Slug).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeaturePlatformName);
        }

        /// <summary>
        /// Returns true if EmailFeaturePlatformName instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeaturePlatformName to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeaturePlatformName input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Slug == input.Slug ||
                    this.Slug.Equals(input.Slug)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Slug.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureOverview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureOverview
    /// </summary>
    [DataContract(Name = "EmailFeatureOverview")]
    public partial class EmailFeatureOverview : IEquatable<EmailFeatureOverview>, IValidatableObject
    {
        /// <summary>
        /// Defines Feature
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FeatureEnum
        {
            /// <summary>
            /// Enum Amp for value: amp
            /// </summary>
            [EnumMember(Value = "amp")]
            Amp = 1,

            /// <summary>
            /// Enum CssAccentColor for value: css-accent-color
            /// </summary>
            [EnumMember(Value = "css-accent-color")]
            CssAccentColor = 2,

            /// <summary>
            /// Enum CssAlignItems for value: css-align-items
            /// </summary>
            [EnumMember(Value = "css-align-items")]
            CssAlignItems = 3,

            /// <summary>
            /// Enum CssAnimation for value: css-animation
            /// </summary>
            [EnumMember(Value = "css-animation")]
            CssAnimation = 4,

            /// <summary>
            /// Enum CssAspectRatio for value: css-aspect-ratio
            /// </summary>
            [EnumMember(Value = "css-aspect-ratio")]
            CssAspectRatio = 5,

            /// <summary>
            /// Enum CssAtFontFace for value: css-at-font-face
            /// </summary>
            [EnumMember(Value = "css-at-font-face")]
            CssAtFontFace = 6,

            /// <summary>
            /// Enum CssAtImport for value: css-at-import
            /// </summary>
            [EnumMember(Value = "css-at-import")]
            CssAtImport = 7,

            /// <summary>
            /// Enum CssAtKeyframes for value: css-at-keyframes
            /// </summary>
            [EnumMember(Value = "css-at-keyframes")]
            CssAtKeyframes = 8,

            /// <summary>
            /// Enum CssAtMedia for value: css-at-media
            /// </summary>
            [EnumMember(Value = "css-at-media")]
            CssAtMedia = 9,

            /// <summary>
            /// Enum CssAtSupports for value: css-at-supports
            /// </summary>
            [EnumMember(Value = "css-at-supports")]
            CssAtSupports = 10,

            /// <summary>
            /// Enum CssBackgroundBlendMode for value: css-background-blend-mode
            /// </summary>
            [EnumMember(Value = "css-background-blend-mode")]
            CssBackgroundBlendMode = 11,

            /// <summary>
            /// Enum CssBackgroundClip for value: css-background-clip
            /// </summary>
            [EnumMember(Value = "css-background-clip")]
            CssBackgroundClip = 12,

            /// <summary>
            /// Enum CssBackgroundColor for value: css-background-color
            /// </summary>
            [EnumMember(Value = "css-background-color")]
            CssBackgroundColor = 13,

            /// <summary>
            /// Enum CssBackgroundImage for value: css-background-image
            /// </summary>
            [EnumMember(Value = "css-background-image")]
            CssBackgroundImage = 14,

            /// <summary>
            /// Enum CssBackgroundOrigin for value: css-background-origin
            /// </summary>
            [EnumMember(Value = "css-background-origin")]
            CssBackgroundOrigin = 15,

            /// <summary>
            /// Enum CssBackgroundPosition for value: css-background-position
            /// </summary>
            [EnumMember(Value = "css-background-position")]
            CssBackgroundPosition = 16,

            /// <summary>
            /// Enum CssBackgroundRepeat for value: css-background-repeat
            /// </summary>
            [EnumMember(Value = "css-background-repeat")]
            CssBackgroundRepeat = 17,

            /// <summary>
            /// Enum CssBackgroundSize for value: css-background-size
            /// </summary>
            [EnumMember(Value = "css-background-size")]
            CssBackgroundSize = 18,

            /// <summary>
            /// Enum CssBackground for value: css-background
            /// </summary>
            [EnumMember(Value = "css-background")]
            CssBackground = 19,

            /// <summary>
            /// Enum CssBlockInlineSize for value: css-block-inline-size
            /// </summary>
            [EnumMember(Value = "css-block-inline-size")]
            CssBlockInlineSize = 20,

            /// <summary>
            /// Enum CssBorderImage for value: css-border-image
            /// </summary>
            [EnumMember(Value = "css-border-image")]
            CssBorderImage = 21,

            /// <summary>
            /// Enum CssBorderInlineBlockIndividual for value: css-border-inline-block-individual
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-individual")]
            CssBorderInlineBlockIndividual = 22,

            /// <summary>
            /// Enum CssBorderInlineBlockLonghand for value: css-border-inline-block-longhand
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-longhand")]
            CssBorderInlineBlockLonghand = 23,

            /// <summary>
            /// Enum CssBorderInlineBlock for value: css-border-inline-block
            /// </summary>
            [EnumMember(Value = "css-border-inline-block")]
            CssBorderInlineBlock = 24,

            /// <summary>
            /// Enum CssBorderRadiusLogical for value: css-border-radius-logical
            /// </summary>
            [EnumMember(Value = "css-border-radius-logical")]
            CssBorderRadiusLogical = 25,

            /// <summary>
            /// Enum CssBorderRadius for value: css-border-radius
            /// </summary>
            [EnumMember(Value = "css-border-radius")]
            CssBorderRadius = 26,

            /// <summary>
            /// Enum CssBorder for value: css-border
            /// </summary>
            [EnumMember(Value = "css-border")]
            CssBorder = 27,

            /// <summary>
            /// Enum CssBoxShadow for value: css-box-shadow
            /// </summary>
            [EnumMember(Value = "css-box-shadow")]
            CssBoxShadow = 28,

            /// <summary>
            /// Enum CssBoxSizing for value: css-box-sizing
            /// </summary>
            [EnumMember(Value = "css-box-sizing")]
            CssBoxSizing = 29,

            /// <summary>
            /// Enum CssCaptionSide for value: css-caption-side
            /// </summary>
            [EnumMember(Value = "css-caption-side")]
            CssCaptionSide = 30,

            /// <summary>
            /// Enum CssClipPath for value: css-clip-path
            /// </summary>
            [EnumMember(Value = "css-clip-path")]
            CssClipPath = 31,

            /// <summary>
            /// Enum CssColumnCount for value: css-column-count
            /// </summary>
            [EnumMember(Value = "css-column-count")]
            CssColumnCount = 32,

            /// <summary>
            /// Enum CssColumnLayoutProperties for value: css-column-layout-properties
            /// </summary>
            [EnumMember(Value = "css-column-layout-properties")]
            CssColumnLayoutProperties = 33,

            /// <summary>
            /// Enum CssDirection for value: css-direction
            /// </summary>
            [EnumMember(Value = "css-direction")]
            CssDirection = 34,

            /// <summary>
            /// Enum CssDisplayFlex for value: css-display-flex
            /// </summary>
            [EnumMember(Value = "css-display-flex")]
            CssDisplayFlex = 35,

            /// <summary>
            /// Enum CssDisplayGrid for value: css-display-grid
            /// </summary>
            [EnumMember(Value = "css-display-grid")]
            CssDisplayGrid = 36,

            /// <summary>
            /// Enum CssDisplayNone for value: css-display-none
            /// </summary>
            [EnumMember(Value = "css-display-none")]
            CssDisplayNone = 37,

            /// <summary>
            /// Enum CssDisplay for value: css-display
            /// </summary>
            [EnumMember(Value = "css-display")]
            CssDisplay = 38,

            /// <summary>
            /// Enum CssFilter for value: css-filter
            /// </summary>
            [EnumMember(Value = "css-filter")]
            CssFilter = 39,

            /// <summary>
            /// Enum CssFlexDirection for value: css-flex-direction
            /// </summary>
            [EnumMember(Value = "css-flex-direction")]
            CssFlexDirection = 40,

            /// <summary>
            /// Enum CssFlexWrap for value: css-flex-wrap
            /// </summary>
            [EnumMember(Value = "css-flex-wrap")]
            CssFlexWrap = 41,

            /// <summary>
            /// Enum CssFloat for value: css-float
            /// </summary>
            [EnumMember(Value = "css-float")]
            CssFloat = 42,

            /// <summary>
            /// Enum CssFontKerning for value: css-font-kerning
            /// </summary>
            [EnumMember(Value = "css-font-kerning")]
            CssFontKerning = 43,

            /// <summary>
            /// Enum CssFontWeight for value: css-font-weight
            /// </summary>
            [EnumMember(Value = "css-font-weight")]
            CssFontWeight = 44,

            /// <summary>
            /// Enum CssFont for value: css-font
            /// </summary>
            [EnumMember(Value = "css-font")]
            CssFont = 45,

            /// <summary>
            /// Enum CssGap for value: css-gap
            /// </summary>
            [EnumMember(Value = "css-gap")]
            CssGap = 46,

            /// <summary>
            /// Enum CssGridTemplate for value: css-grid-template
            /// </summary>
            [EnumMember(Value = "css-grid-template")]
            CssGridTemplate = 47,

            /// <summary>
            /// Enum CssHeight for value: css-height
            /// </summary>
            [EnumMember(Value = "css-height")]
            CssHeight = 48,

            /// <summary>
            /// Enum CssHyphens for value: css-hyphens
            /// </summary>
            [EnumMember(Value = "css-hyphens")]
            CssHyphens = 49,

            /// <summary>
            /// Enum CssInlineSize for value: css-inline-size
            /// </summary>
            [EnumMember(Value = "css-inline-size")]
            CssInlineSize = 50,

            /// <summary>
            /// Enum CssJustifyContent for value: css-justify-content
            /// </summary>
            [EnumMember(Value = "css-justify-content")]
            CssJustifyContent = 51,

            /// <summary>
            /// Enum CssLeftRightTopBottom for value: css-left-right-top-bottom
            /// </summary>
            [EnumMember(Value = "css-left-right-top-bottom")]
            CssLeftRightTopBottom = 52,

            /// <summary>
            /// Enum CssLetterSpacing for value: css-letter-spacing
            /// </summary>
            [EnumMember(Value = "css-letter-spacing")]
            CssLetterSpacing = 53,

            /// <summary>
            /// Enum CssLineHeight for value: css-line-height
            /// </summary>
            [EnumMember(Value = "css-line-height")]
            CssLineHeight = 54,

            /// <summary>
            /// Enum CssListStyleImage for value: css-list-style-image
            /// </summary>
            [EnumMember(Value = "css-list-style-image")]
            CssListStyleImage = 55,

            /// <summary>
            /// Enum CssListStylePosition for value: css-list-style-position
            /// </summary>
            [EnumMember(Value = "css-list-style-position")]
            CssListStylePosition = 56,

            /// <summary>
            /// Enum CssListStyleType for value: css-list-style-type
            /// </summary>
            [EnumMember(Value = "css-list-style-type")]
            CssListStyleType = 57,

            /// <summary>
            /// Enum CssListStyle for value: css-list-style
            /// </summary>
            [EnumMember(Value = "css-list-style")]
            CssListStyle = 58,

            /// <summary>
            /// Enum CssMarginBlockStartEnd for value: css-margin-block-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-block-start-end")]
            CssMarginBlockStartEnd = 59,

            /// <summary>
            /// Enum CssMarginInlineBlock for value: css-margin-inline-block
            /// </summary>
            [EnumMember(Value = "css-margin-inline-block")]
            CssMarginInlineBlock = 60,

            /// <summary>
            /// Enum CssMarginInlineStartEnd for value: css-margin-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-inline-start-end")]
            CssMarginInlineStartEnd = 61,

            /// <summary>
            /// Enum CssMarginInline for value: css-margin-inline
            /// </summary>
            [EnumMember(Value = "css-margin-inline")]
            CssMarginInline = 62,

            /// <summary>
            /// Enum CssMargin for value: css-margin
            /// </summary>
            [EnumMember(Value = "css-margin")]
            CssMargin = 63,

            /// <summary>
            /// Enum CssMaxBlockSize for value: css-max-block-size
            /// </summary>
            [EnumMember(Value = "css-max-block-size")]
            CssMaxBlockSize = 64,

            /// <summary>
            /// Enum CssMaxHeight for value: css-max-height
            /// </summary>
            [EnumMember(Value = "css-max-height")]
            CssMaxHeight = 65,

            /// <summary>
            /// Enum CssMaxWidth for value: css-max-width
            /// </summary>
            [EnumMember(Value = "css-max-width")]
            CssMaxWidth = 66,

            /// <summary>
            /// Enum CssMinHeight for value: css-min-height
            /// </summary>
            [EnumMember(Value = "css-min-height")]
            CssMinHeight = 67,

            /// <summary>
            /// Enum CssMinInlineSize for value: css-min-inline-size
            /// </summary>
            [EnumMember(Value = "css-min-inline-size")]
            CssMinInlineSize = 68,

            /// <summary>
            /// Enum CssMinWidth for value: css-min-width
            /// </summary>
            [EnumMember(Value = "css-min-width")]
            CssMinWidth = 69,

            /// <summary>
            /// Enum CssMixBlendMode for value: css-mix-blend-mode
            /// </summary>
            [EnumMember(Value = "css-mix-blend-mode")]
            CssMixBlendMode = 70,

            /// <summary>
            /// Enum CssObjectFit for value: css-object-fit
            /// </summary>
            [EnumMember(Value = "css-object-fit")]
            CssObjectFit = 71,

            /// <summary>
            /// Enum CssObjectPosition for value: css-object-position
            /// </summary>
            [EnumMember(Value = "css-object-position")]
            CssObjectPosition = 72,

            /// <summary>
            /// Enum CssOpacity for value: css-opacity
            /// </summary>
            [EnumMember(Value = "css-opacity")]
            CssOpacity = 73,

            /// <summary>
            /// Enum CssOutlineOffset for value: css-outline-offset
            /// </summary>
            [EnumMember(Value = "css-outline-offset")]
            CssOutlineOffset = 74,

            /// <summary>
            /// Enum CssOutline for value: css-outline
            /// </summary>
            [EnumMember(Value = "css-outline")]
            CssOutline = 75,

            /// <summary>
            /// Enum CssOverflowWrap for value: css-overflow-wrap
            /// </summary>
            [EnumMember(Value = "css-overflow-wrap")]
            CssOverflowWrap = 76,

            /// <summary>
            /// Enum CssOverflow for value: css-overflow
            /// </summary>
            [EnumMember(Value = "css-overflow")]
            CssOverflow = 77,

            /// <summary>
            /// Enum CssPaddingBlockStartEnd for value: css-padding-block-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-block-start-end")]
            CssPaddingBlockStartEnd = 78,

            /// <summary>
            /// Enum CssPaddingInlineBlock for value: css-padding-inline-block
            /// </summary>
            [EnumMember(Value = "css-padding-inline-block")]
            CssPaddingInlineBlock = 79,

            /// <summary>
            /// Enum CssPaddingInlineStartEnd for value: css-padding-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-inline-start-end")]
            CssPaddingInlineStartEnd = 80,

            /// <summary>
            /// Enum CssPadding for value: css-padding
            /// </summary>
            [EnumMember(Value = "css-padding")]
            CssPadding = 81,

            /// <summary>
            /// Enum CssPosition for value: css-position
            /// </summary>
            [EnumMember(Value = "css-position")]
            CssPosition = 82,

            /// <summary>
            /// Enum CssTabSize for value: css-tab-size
            /// </summary>
            [EnumMember(Value = "css-tab-size")]
            CssTabSize = 83,

            /// <summary>
            /// Enum CssTableLayout for value: css-table-layout
            /// </summary>
            [EnumMember(Value = "css-table-layout")]
            CssTableLayout = 84,

            /// <summary>
            /// Enum CssTextAlignLast for value: css-text-align-last
            /// </summary>
            [EnumMember(Value = "css-text-align-last")]
            CssTextAlignLast = 85,

            /// <summary>
            /// Enum CssTextAlign for value: css-text-align
            /// </summary>
            [EnumMember(Value = "css-text-align")]
            CssTextAlign = 86,

            /// <summary>
            /// Enum CssTextDecorationColor for value: css-text-decoration-color
            /// </summary>
            [EnumMember(Value = "css-text-decoration-color")]
            CssTextDecorationColor = 87,

            /// <summary>
            /// Enum CssTextDecorationThickness for value: css-text-decoration-thickness
            /// </summary>
            [EnumMember(Value = "css-text-decoration-thickness")]
            CssTextDecorationThickness = 88,

            /// <summary>
            /// Enum CssTextDecoration for value: css-text-decoration
            /// </summary>
            [EnumMember(Value = "css-text-decoration")]
            CssTextDecoration = 89,

            /// <summary>
            /// Enum CssTextEmphasisPosition for value: css-text-emphasis-position
            /// </summary>
            [EnumMember(Value = "css-text-emphasis-position")]
            CssTextEmphasisPosition = 90,

            /// <summary>
            /// Enum CssTextEmphasis for value: css-text-emphasis
            /// </summary>
            [EnumMember(Value = "css-text-emphasis")]
            CssTextEmphasis = 91,

            /// <summary>
            /// Enum CssTextIndent for value: css-text-indent
            /// </summary>
            [EnumMember(Value = "css-text-indent")]
            CssTextIndent = 92,

            /// <summary>
            /// Enum CssTextOverflow for value: css-text-overflow
            /// </summary>
            [EnumMember(Value = "css-text-overflow")]
            CssTextOverflow = 93,

            /// <summary>
            /// Enum CssTextShadow for value: css-text-shadow
            /// </summary>
            [EnumMember(Value = "css-text-shadow")]
            CssTextShadow = 94,

            /// <summary>
            /// Enum CssTextTransform for value: css-text-transform
            /// </summary>
            [EnumMember(Value = "css-text-transform")]
            CssTextTransform = 95,

            /// <summary>
            /// Enum CssTextUnderlineOffset for value: css-text-underline-offset
            /// </summary>
            [EnumMember(Value = "css-text-underline-offset")]
            CssTextUnderlineOffset = 96,

            /// <summary>
            /// Enum CssTransform for value: css-transform
            /// </summary>
            [EnumMember(Value = "css-transform")]
            CssTransform = 97,

            /// <summary>
            /// Enum CssVerticalAlign for value: css-vertical-align
            /// </summary>
            [EnumMember(Value = "css-vertical-align")]
            CssVerticalAlign = 98,

            /// <summary>
            /// Enum CssVisibility for value: css-visibility
            /// </summary>
            [EnumMember(Value = "css-visibility")]
            CssVisibility = 99,

            /// <summary>
            /// Enum CssWhiteSpace for value: css-white-space
            /// </summary>
            [EnumMember(Value = "css-white-space")]
            CssWhiteSpace = 100,

            /// <summary>
            /// Enum CssWidth for value: css-width
            /// </summary>
            [EnumMember(Value = "css-width")]
            CssWidth = 101,

            /// <summary>
            /// Enum CssWordBreak for value: css-word-break
            /// </summary>
            [EnumMember(Value = "css-word-break")]
            CssWordBreak = 102,

            /// <summary>
            /// Enum CssWritingMode for value: css-writing-mode
            /// </summary>
            [EnumMember(Value = "css-writing-mode")]
            CssWritingMode = 103,

            /// <summary>
            /// Enum CssZIndex for value: css-z-index
            /// </summary>
            [EnumMember(Value = "css-z-index")]
            CssZIndex = 104,

            /// <summary>
            /// Enum HtmlAbbr for value: html-abbr
            /// </summary>
            [EnumMember(Value = "html-abbr")]
            HtmlAbbr = 105,

            /// <summary>
            /// Enum HtmlAddress for value: html-address
            /// </summary>
            [EnumMember(Value = "html-address")]
            HtmlAddress = 106,

            /// <summary>
            /// Enum HtmlAlign for value: html-align
            /// </summary>
            [EnumMember(Value = "html-align")]
            HtmlAlign = 107,

            /// <summary>
            /// Enum HtmlAnchorLinks for value: html-anchor-links
            /// </summary>
            [EnumMember(Value = "html-anchor-links")]
            HtmlAnchorLinks = 108,

            /// <summary>
            /// Enum HtmlAriaDescribedby for value: html-aria-describedby
            /// </summary>
            [EnumMember(Value = "html-aria-describedby")]
            HtmlAriaDescribedby = 109,

            /// <summary>
            /// Enum HtmlAriaHidden for value: html-aria-hidden
            /// </summary>
            [EnumMember(Value = "html-aria-hidden")]
            HtmlAriaHidden = 110,

            /// <summary>
            /// Enum HtmlAriaLabel for value: html-aria-label
            /// </summary>
            [EnumMember(Value = "html-aria-label")]
            HtmlAriaLabel = 111,

            /// <summary>
            /// Enum HtmlAriaLabelledby for value: html-aria-labelledby
            /// </summary>
            [EnumMember(Value = "html-aria-labelledby")]
            HtmlAriaLabelledby = 112,

            /// <summary>
            /// Enum HtmlAriaLive for value: html-aria-live
            /// </summary>
            [EnumMember(Value = "html-aria-live")]
            HtmlAriaLive = 113,

            /// <summary>
            /// Enum HtmlAudio for value: html-audio
            /// </summary>
            [EnumMember(Value = "html-audio")]
            HtmlAudio = 114,

            /// <summary>
            /// Enum HtmlBackground for value: html-background
            /// </summary>
            [EnumMember(Value = "html-background")]
            HtmlBackground = 115,

            /// <summary>
            /// Enum HtmlBase for value: html-base
            /// </summary>
            [EnumMember(Value = "html-base")]
            HtmlBase = 116,

            /// <summary>
            /// Enum HtmlBlockquote for value: html-blockquote
            /// </summary>
            [EnumMember(Value = "html-blockquote")]
            HtmlBlockquote = 117,

            /// <summary>
            /// Enum HtmlBody for value: html-body
            /// </summary>
            [EnumMember(Value = "html-body")]
            HtmlBody = 118,

            /// <summary>
            /// Enum HtmlButtonReset for value: html-button-reset
            /// </summary>
            [EnumMember(Value = "html-button-reset")]
            HtmlButtonReset = 119,

            /// <summary>
            /// Enum HtmlButtonSubmit for value: html-button-submit
            /// </summary>
            [EnumMember(Value = "html-button-submit")]
            HtmlButtonSubmit = 120,

            /// <summary>
            /// Enum HtmlCode for value: html-code
            /// </summary>
            [EnumMember(Value = "html-code")]
            HtmlCode = 121,

            /// <summary>
            /// Enum HtmlDel for value: html-del
            /// </summary>
            [EnumMember(Value = "html-del")]
            HtmlDel = 122,

            /// <summary>
            /// Enum HtmlDfn for value: html-dfn
            /// </summary>
            [EnumMember(Value = "html-dfn")]
            HtmlDfn = 123,

            /// <summary>
            /// Enum HtmlDialog for value: html-dialog
            /// </summary>
            [EnumMember(Value = "html-dialog")]
            HtmlDialog = 124,

            /// <summary>
            /// Enum HtmlDir for value: html-dir
            /// </summary>
            [EnumMember(Value = "html-dir")]
            HtmlDir = 125,

            /// <summary>
            /// Enum HtmlDiv for value: html-div
            /// </summary>
            [EnumMember(Value = "html-div")]
            HtmlDiv = 126,

            /// <summary>
            /// Enum HtmlDoctype for value: html-doctype
            /// </summary>
            [EnumMember(Value = "html-doctype")]
            HtmlDoctype = 127,

            /// <summary>
            /// Enum HtmlForm for value: html-form
            /// </summary>
            [EnumMember(Value = "html-form")]
            HtmlForm = 128,

            /// <summary>
            /// Enum HtmlH1H6 for value: html-h1-h6
            /// </summary>
            [EnumMember(Value = "html-h1-h6")]
            HtmlH1H6 = 129,

            /// <summary>
            /// Enum HtmlHeight for value: html-height
            /// </summary>
            [EnumMember(Value = "html-height")]
            HtmlHeight = 130,

            /// <summary>
            /// Enum HtmlImageMaps for value: html-image-maps
            /// </summary>
            [EnumMember(Value = "html-image-maps")]
            HtmlImageMaps = 131,

            /// <summary>
            /// Enum HtmlInputCheckbox for value: html-input-checkbox
            /// </summary>
            [EnumMember(Value = "html-input-checkbox")]
            HtmlInputCheckbox = 132,

            /// <summary>
            /// Enum HtmlInputHidden for value: html-input-hidden
            /// </summary>
            [EnumMember(Value = "html-input-hidden")]
            HtmlInputHidden = 133,

            /// <summary>
            /// Enum HtmlInputRadio for value: html-input-radio
            /// </summary>
            [EnumMember(Value = "html-input-radio")]
            HtmlInputRadio = 134,

            /// <summary>
            /// Enum HtmlInputReset for value: html-input-reset
            /// </summary>
            [EnumMember(Value = "html-input-reset")]
            HtmlInputReset = 135,

            /// <summary>
            /// Enum HtmlInputSubmit for value: html-input-submit
            /// </summary>
            [EnumMember(Value = "html-input-submit")]
            HtmlInputSubmit = 136,

            /// <summary>
            /// Enum HtmlInputText for value: html-input-text
            /// </summary>
            [EnumMember(Value = "html-input-text")]
            HtmlInputText = 137,

            /// <summary>
            /// Enum HtmlLang for value: html-lang
            /// </summary>
            [EnumMember(Value = "html-lang")]
            HtmlLang = 138,

            /// <summary>
            /// Enum HtmlLink for value: html-link
            /// </summary>
            [EnumMember(Value = "html-link")]
            HtmlLink = 139,

            /// <summary>
            /// Enum HtmlLists for value: html-lists
            /// </summary>
            [EnumMember(Value = "html-lists")]
            HtmlLists = 140,

            /// <summary>
            /// Enum HtmlLoadingAttribute for value: html-loading-attribute
            /// </summary>
            [EnumMember(Value = "html-loading-attribute")]
            HtmlLoadingAttribute = 141,

            /// <summary>
            /// Enum HtmlMailtoLinks for value: html-mailto-links
            /// </summary>
            [EnumMember(Value = "html-mailto-links")]
            HtmlMailtoLinks = 142,

            /// <summary>
            /// Enum HtmlMarquee for value: html-marquee
            /// </summary>
            [EnumMember(Value = "html-marquee")]
            HtmlMarquee = 143,

            /// <summary>
            /// Enum HtmlMeter for value: html-meter
            /// </summary>
            [EnumMember(Value = "html-meter")]
            HtmlMeter = 144,

            /// <summary>
            /// Enum HtmlObject for value: html-object
            /// </summary>
            [EnumMember(Value = "html-object")]
            HtmlObject = 145,

            /// <summary>
            /// Enum HtmlP for value: html-p
            /// </summary>
            [EnumMember(Value = "html-p")]
            HtmlP = 146,

            /// <summary>
            /// Enum HtmlPicture for value: html-picture
            /// </summary>
            [EnumMember(Value = "html-picture")]
            HtmlPicture = 147,

            /// <summary>
            /// Enum HtmlPre for value: html-pre
            /// </summary>
            [EnumMember(Value = "html-pre")]
            HtmlPre = 148,

            /// <summary>
            /// Enum HtmlProgress for value: html-progress
            /// </summary>
            [EnumMember(Value = "html-progress")]
            HtmlProgress = 149,

            /// <summary>
            /// Enum HtmlRequired for value: html-required
            /// </summary>
            [EnumMember(Value = "html-required")]
            HtmlRequired = 150,

            /// <summary>
            /// Enum HtmlRole for value: html-role
            /// </summary>
            [EnumMember(Value = "html-role")]
            HtmlRole = 151,

            /// <summary>
            /// Enum HtmlRp for value: html-rp
            /// </summary>
            [EnumMember(Value = "html-rp")]
            HtmlRp = 152,

            /// <summary>
            /// Enum HtmlRt for value: html-rt
            /// </summary>
            [EnumMember(Value = "html-rt")]
            HtmlRt = 153,

            /// <summary>
            /// Enum HtmlRuby for value: html-ruby
            /// </summary>
            [EnumMember(Value = "html-ruby")]
            HtmlRuby = 154,

            /// <summary>
            /// Enum HtmlSelect for value: html-select
            /// </summary>
            [EnumMember(Value = "html-select")]
            HtmlSelect = 155,

            /// <summary>
            /// Enum HtmlSemantics for value: html-semantics
            /// </summary>
            [EnumMember(Value = "html-semantics")]
            HtmlSemantics = 156,

            /// <summary>
            /// Enum HtmlSmall for value: html-small
            /// </summary>
            [EnumMember(Value = "html-small")]
            HtmlSmall = 157,

            /// <summary>
            /// Enum HtmlSpan for value: html-span
            /// </summary>
            [EnumMember(Value = "html-span")]
            HtmlSpan = 158,

            /// <summary>
            /// Enum HtmlSrcset for value: html-srcset
            /// </summary>
            [EnumMember(Value = "html-srcset")]
            HtmlSrcset = 159,

            /// <summary>
            /// Enum HtmlStrike for value: html-strike
            /// </summary>
            [EnumMember(Value = "html-strike")]
            HtmlStrike = 160,

            /// <summary>
            /// Enum HtmlStrong for value: html-strong
            /// </summary>
            [EnumMember(Value = "html-strong")]
            HtmlStrong = 161,

            /// <summary>
            /// Enum HtmlStyle for value: html-style
            /// </summary>
            [EnumMember(Value = "html-style")]
            HtmlStyle = 162,

            /// <summary>
            /// Enum HtmlSvg for value: html-svg
            /// </summary>
            [EnumMember(Value = "html-svg")]
            HtmlSvg = 163,

            /// <summary>
            /// Enum HtmlTable for value: html-table
            /// </summary>
            [EnumMember(Value = "html-table")]
            HtmlTable = 164,

            /// <summary>
            /// Enum HtmlTarget for value: html-target
            /// </summary>
            [EnumMember(Value = "html-target")]
            HtmlTarget = 165,

            /// <summary>
            /// Enum HtmlTextarea for value: html-textarea
            /// </summary>
            [EnumMember(Value = "html-textarea")]
            HtmlTextarea = 166,

            /// <summary>
            /// Enum HtmlValign for value: html-valign
            /// </summary>
            [EnumMember(Value = "html-valign")]
            HtmlValign = 167,

            /// <summary>
            /// Enum HtmlVideo for value: html-video
            /// </summary>
            [EnumMember(Value = "html-video")]
            HtmlVideo = 168,

            /// <summary>
            /// Enum HtmlWbr for value: html-wbr
            /// </summary>
            [EnumMember(Value = "html-wbr")]
            HtmlWbr = 169,

            /// <summary>
            /// Enum HtmlWidth for value: html-width
            /// </summary>
            [EnumMember(Value = "html-width")]
            HtmlWidth = 170,

            /// <summary>
            /// Enum ImageAvif for value: image-avif
            /// </summary>
            [EnumMember(Value = "image-avif")]
            ImageAvif = 171,

            /// <summary>
            /// Enum ImageBase64 for value: image-base64
            /// </summary>
            [EnumMember(Value = "image-base64")]
            ImageBase64 = 172,

            /// <summary>
            /// Enum ImageBmp for value: image-bmp
            /// </summary>
            [EnumMember(Value = "image-bmp")]
            ImageBmp = 173,

            /// <summary>
            /// Enum ImageGif for value: image-gif
            /// </summary>
            [EnumMember(Value = "image-gif")]
            ImageGif = 174,

            /// <summary>
            /// Enum ImageIco for value: image-ico
            /// </summary>
            [EnumMember(Value = "image-ico")]
            ImageIco = 175,

            /// <summary>
            /// Enum ImageJpg for value: image-jpg
            /// </summary>
            [EnumMember(Value = "image-jpg")]
            ImageJpg = 176,

            /// <summary>
            /// Enum ImagePng for value: image-png
            /// </summary>
            [EnumMember(Value = "image-png")]
            ImagePng = 177,

            /// <summary>
            /// Enum ImageSvg for value: image-svg
            /// </summary>
            [EnumMember(Value = "image-svg")]
            ImageSvg = 178,

            /// <summary>
            /// Enum ImageWebp for value: image-webp
            /// </summary>
            [EnumMember(Value = "image-webp")]
            ImageWebp = 179,

            /// <summary>
            /// Enum Unsupported for value: unsupported
            /// </summary>
            [EnumMember(Value = "unsupported")]
            Unsupported = 180

        }


        /// <summary>
        /// Gets or Sets Feature
        /// </summary>
        [DataMember(Name = "feature", IsRequired = true, EmitDefaultValue = true)]
        public FeatureEnum Feature { get; set; }
        /// <summary>
        /// Defines Category
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum CategoryEnum
        {
            /// <summary>
            /// Enum Css for value: css
            /// </summary>
            [EnumMember(Value = "css")]
            Css = 1,

            /// <summary>
            /// Enum Html for value: html
            /// </summary>
            [EnumMember(Value = "html")]
            Html = 2,

            /// <summary>
            /// Enum Image for value: image
            /// </summary>
            [EnumMember(Value = "image")]
            Image = 3,

            /// <summary>
            /// Enum Others for value: others
            /// </summary>
            [EnumMember(Value = "others")]
            Others = 4

        }


        /// <summary>
        /// Gets or Sets Category
        /// </summary>
        [DataMember(Name = "category", EmitDefaultValue = false)]
        public CategoryEnum? Category { get; set; }
        /// <summary>
        /// Defines Statuses
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum StatusesEnum
        {
            /// <summary>
            /// Enum SUPPORTED for value: SUPPORTED
            /// </summary>
            [EnumMember(Value = "SUPPORTED")]
            SUPPORTED = 1,

            /// <summary>
            /// Enum PARTIAL for value: PARTIAL
            /// </summary>
            [EnumMember(Value = "PARTIAL")]
            PARTIAL = 2,

            /// <summary>
            /// Enum NOTSUPPORTED for value: NOT_SUPPORTED
            /// </summary>
            [EnumMember(Value = "NOT_SUPPORTED")]
            NOTSUPPORTED = 3,

            /// <summary>
            /// Enum UNKNOWN for value: UNKNOWN
            /// </summary>
            [EnumMember(Value = "UNKNOWN")]
            UNKNOWN = 4

        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureOverview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureOverview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureOverview" /> class.
        /// </summary>
        /// <param name="feature">feature (required).</param>
        /// <param name="title">title.</param>
        /// <param name="description">description.</param>
        /// <param name="category">category.</param>
        /// <param name="notes">notes.</param>
        /// <param name="notesNumbers">notesNumbers.</param>
        /// <param name="featureStatistics">featureStatistics.</param>
        /// <param name="statuses">statuses (required).</param>
        public EmailFeatureOverview(FeatureEnum feature = default(FeatureEnum), string title = default(string), string description = default(string), CategoryEnum? category = default(CategoryEnum?), string notes = default(string), Dictionary<string, string> notesNumbers = default(Dictionary<string, string>), List<EmailFeatureFamilyStatistics> featureStatistics = default(List<EmailFeatureFamilyStatistics>), List<StatusesEnum> statuses = default(List<StatusesEnum>))
        {
            this.Feature = feature;
            // to ensure "statuses" is required (not null)
            if (statuses == null)
            {
                throw new ArgumentNullException("statuses is a required property for EmailFeatureOverview and cannot be null");
            }
            this.Statuses = statuses;
            this.Title = title;
            this.Description = description;
            this.Category = category;
            this.Notes = notes;
            this.NotesNumbers = notesNumbers;
            this.FeatureStatistics = featureStatistics;
        }

        /// <summary>
        /// Gets or Sets Title
        /// </summary>
        [DataMember(Name = "title", EmitDefaultValue = false)]
        public string Title { get; set; }

        /// <summary>
        /// Gets or Sets Description
        /// </summary>
        [DataMember(Name = "description", EmitDefaultValue = false)]
        public string Description { get; set; }

        /// <summary>
        /// Gets or Sets Notes
        /// </summary>
        [DataMember(Name = "notes", EmitDefaultValue = false)]
        public string Notes { get; set; }

        /// <summary>
        /// Gets or Sets NotesNumbers
        /// </summary>
        [DataMember(Name = "notesNumbers", EmitDefaultValue = false)]
        public Dictionary<string, string> NotesNumbers { get; set; }

        /// <summary>
        /// Gets or Sets FeatureStatistics
        /// </summary>
        [DataMember(Name = "featureStatistics", EmitDefaultValue = false)]
        public List<EmailFeatureFamilyStatistics> FeatureStatistics { get; set; }

        /// <summary>
        /// Gets or Sets Statuses
        /// </summary>
        [DataMember(Name = "statuses", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureOverview.StatusesEnum> Statuses { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureOverview {\n");
            sb.Append("  Feature: ").Append(Feature).Append("\n");
            sb.Append("  Title: ").Append(Title).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  Category: ").Append(Category).Append("\n");
            sb.Append("  Notes: ").Append(Notes).Append("\n");
            sb.Append("  NotesNumbers: ").Append(NotesNumbers).Append("\n");
            sb.Append("  FeatureStatistics: ").Append(FeatureStatistics).Append("\n");
            sb.Append("  Statuses: ").Append(Statuses).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureOverview);
        }

        /// <summary>
        /// Returns true if EmailFeatureOverview instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureOverview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureOverview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Feature == input.Feature ||
                    this.Feature.Equals(input.Feature)
                ) && 
                (
                    this.Title == input.Title ||
                    (this.Title != null &&
                    this.Title.Equals(input.Title))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.Category == input.Category ||
                    this.Category.Equals(input.Category)
                ) && 
                (
                    this.Notes == input.Notes ||
                    (this.Notes != null &&
                    this.Notes.Equals(input.Notes))
                ) && 
                (
                    this.NotesNumbers == input.NotesNumbers ||
                    this.NotesNumbers != null &&
                    input.NotesNumbers != null &&
                    this.NotesNumbers.SequenceEqual(input.NotesNumbers)
                ) && 
                (
                    this.FeatureStatistics == input.FeatureStatistics ||
                    this.FeatureStatistics != null &&
                    input.FeatureStatistics != null &&
                    this.FeatureStatistics.SequenceEqual(input.FeatureStatistics)
                ) && 
                (
                    this.Statuses == input.Statuses ||
                    this.Statuses != null &&
                    input.Statuses != null &&
                    this.Statuses.SequenceEqual(input.Statuses)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Feature.GetHashCode();
                if (this.Title != null)
                {
                    hashCode = (hashCode * 59) + this.Title.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Category.GetHashCode();
                if (this.Notes != null)
                {
                    hashCode = (hashCode * 59) + this.Notes.GetHashCode();
                }
                if (this.NotesNumbers != null)
                {
                    hashCode = (hashCode * 59) + this.NotesNumbers.GetHashCode();
                }
                if (this.FeatureStatistics != null)
                {
                    hashCode = (hashCode * 59) + this.FeatureStatistics.GetHashCode();
                }
                if (this.Statuses != null)
                {
                    hashCode = (hashCode * 59) + this.Statuses.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureNames.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureNames
    /// </summary>
    [DataContract(Name = "EmailFeatureNames")]
    public partial class EmailFeatureNames : IEquatable<EmailFeatureNames>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureNames" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureNames() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureNames" /> class.
        /// </summary>
        /// <param name="family">family (required).</param>
        /// <param name="platform">platform (required).</param>
        /// <param name="category">category (required).</param>
        public EmailFeatureNames(List<EmailFeatureFamilyName> family = default(List<EmailFeatureFamilyName>), List<EmailFeaturePlatformName> platform = default(List<EmailFeaturePlatformName>), List<EmailFeatureCategoryName> category = default(List<EmailFeatureCategoryName>))
        {
            // to ensure "family" is required (not null)
            if (family == null)
            {
                throw new ArgumentNullException("family is a required property for EmailFeatureNames and cannot be null");
            }
            this.Family = family;
            // to ensure "platform" is required (not null)
            if (platform == null)
            {
                throw new ArgumentNullException("platform is a required property for EmailFeatureNames and cannot be null");
            }
            this.Platform = platform;
            // to ensure "category" is required (not null)
            if (category == null)
            {
                throw new ArgumentNullException("category is a required property for EmailFeatureNames and cannot be null");
            }
            this.Category = category;
        }

        /// <summary>
        /// Gets or Sets Family
        /// </summary>
        [DataMember(Name = "family", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureFamilyName> Family { get; set; }

        /// <summary>
        /// Gets or Sets Platform
        /// </summary>
        [DataMember(Name = "platform", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeaturePlatformName> Platform { get; set; }

        /// <summary>
        /// Gets or Sets Category
        /// </summary>
        [DataMember(Name = "category", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeatureCategoryName> Category { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureNames {\n");
            sb.Append("  Family: ").Append(Family).Append("\n");
            sb.Append("  Platform: ").Append(Platform).Append("\n");
            sb.Append("  Category: ").Append(Category).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureNames);
        }

        /// <summary>
        /// Returns true if EmailFeatureNames instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureNames to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureNames input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Family == input.Family ||
                    this.Family != null &&
                    input.Family != null &&
                    this.Family.SequenceEqual(input.Family)
                ) && 
                (
                    this.Platform == input.Platform ||
                    this.Platform != null &&
                    input.Platform != null &&
                    this.Platform.SequenceEqual(input.Platform)
                ) && 
                (
                    this.Category == input.Category ||
                    this.Category != null &&
                    input.Category != null &&
                    this.Category.SequenceEqual(input.Category)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Family != null)
                {
                    hashCode = (hashCode * 59) + this.Family.GetHashCode();
                }
                if (this.Platform != null)
                {
                    hashCode = (hashCode * 59) + this.Platform.GetHashCode();
                }
                if (this.Category != null)
                {
                    hashCode = (hashCode * 59) + this.Category.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureFamilyStatistics.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureFamilyStatistics
    /// </summary>
    [DataContract(Name = "EmailFeatureFamilyStatistics")]
    public partial class EmailFeatureFamilyStatistics : IEquatable<EmailFeatureFamilyStatistics>, IValidatableObject
    {
        /// <summary>
        /// Defines Feature
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FeatureEnum
        {
            /// <summary>
            /// Enum Amp for value: amp
            /// </summary>
            [EnumMember(Value = "amp")]
            Amp = 1,

            /// <summary>
            /// Enum CssAccentColor for value: css-accent-color
            /// </summary>
            [EnumMember(Value = "css-accent-color")]
            CssAccentColor = 2,

            /// <summary>
            /// Enum CssAlignItems for value: css-align-items
            /// </summary>
            [EnumMember(Value = "css-align-items")]
            CssAlignItems = 3,

            /// <summary>
            /// Enum CssAnimation for value: css-animation
            /// </summary>
            [EnumMember(Value = "css-animation")]
            CssAnimation = 4,

            /// <summary>
            /// Enum CssAspectRatio for value: css-aspect-ratio
            /// </summary>
            [EnumMember(Value = "css-aspect-ratio")]
            CssAspectRatio = 5,

            /// <summary>
            /// Enum CssAtFontFace for value: css-at-font-face
            /// </summary>
            [EnumMember(Value = "css-at-font-face")]
            CssAtFontFace = 6,

            /// <summary>
            /// Enum CssAtImport for value: css-at-import
            /// </summary>
            [EnumMember(Value = "css-at-import")]
            CssAtImport = 7,

            /// <summary>
            /// Enum CssAtKeyframes for value: css-at-keyframes
            /// </summary>
            [EnumMember(Value = "css-at-keyframes")]
            CssAtKeyframes = 8,

            /// <summary>
            /// Enum CssAtMedia for value: css-at-media
            /// </summary>
            [EnumMember(Value = "css-at-media")]
            CssAtMedia = 9,

            /// <summary>
            /// Enum CssAtSupports for value: css-at-supports
            /// </summary>
            [EnumMember(Value = "css-at-supports")]
            CssAtSupports = 10,

            /// <summary>
            /// Enum CssBackgroundBlendMode for value: css-background-blend-mode
            /// </summary>
            [EnumMember(Value = "css-background-blend-mode")]
            CssBackgroundBlendMode = 11,

            /// <summary>
            /// Enum CssBackgroundClip for value: css-background-clip
            /// </summary>
            [EnumMember(Value = "css-background-clip")]
            CssBackgroundClip = 12,

            /// <summary>
            /// Enum CssBackgroundColor for value: css-background-color
            /// </summary>
            [EnumMember(Value = "css-background-color")]
            CssBackgroundColor = 13,

            /// <summary>
            /// Enum CssBackgroundImage for value: css-background-image
            /// </summary>
            [EnumMember(Value = "css-background-image")]
            CssBackgroundImage = 14,

            /// <summary>
            /// Enum CssBackgroundOrigin for value: css-background-origin
            /// </summary>
            [EnumMember(Value = "css-background-origin")]
            CssBackgroundOrigin = 15,

            /// <summary>
            /// Enum CssBackgroundPosition for value: css-background-position
            /// </summary>
            [EnumMember(Value = "css-background-position")]
            CssBackgroundPosition = 16,

            /// <summary>
            /// Enum CssBackgroundRepeat for value: css-background-repeat
            /// </summary>
            [EnumMember(Value = "css-background-repeat")]
            CssBackgroundRepeat = 17,

            /// <summary>
            /// Enum CssBackgroundSize for value: css-background-size
            /// </summary>
            [EnumMember(Value = "css-background-size")]
            CssBackgroundSize = 18,

            /// <summary>
            /// Enum CssBackground for value: css-background
            /// </summary>
            [EnumMember(Value = "css-background")]
            CssBackground = 19,

            /// <summary>
            /// Enum CssBlockInlineSize for value: css-block-inline-size
            /// </summary>
            [EnumMember(Value = "css-block-inline-size")]
            CssBlockInlineSize = 20,

            /// <summary>
            /// Enum CssBorderImage for value: css-border-image
            /// </summary>
            [EnumMember(Value = "css-border-image")]
            CssBorderImage = 21,

            /// <summary>
            /// Enum CssBorderInlineBlockIndividual for value: css-border-inline-block-individual
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-individual")]
            CssBorderInlineBlockIndividual = 22,

            /// <summary>
            /// Enum CssBorderInlineBlockLonghand for value: css-border-inline-block-longhand
            /// </summary>
            [EnumMember(Value = "css-border-inline-block-longhand")]
            CssBorderInlineBlockLonghand = 23,

            /// <summary>
            /// Enum CssBorderInlineBlock for value: css-border-inline-block
            /// </summary>
            [EnumMember(Value = "css-border-inline-block")]
            CssBorderInlineBlock = 24,

            /// <summary>
            /// Enum CssBorderRadiusLogical for value: css-border-radius-logical
            /// </summary>
            [EnumMember(Value = "css-border-radius-logical")]
            CssBorderRadiusLogical = 25,

            /// <summary>
            /// Enum CssBorderRadius for value: css-border-radius
            /// </summary>
            [EnumMember(Value = "css-border-radius")]
            CssBorderRadius = 26,

            /// <summary>
            /// Enum CssBorder for value: css-border
            /// </summary>
            [EnumMember(Value = "css-border")]
            CssBorder = 27,

            /// <summary>
            /// Enum CssBoxShadow for value: css-box-shadow
            /// </summary>
            [EnumMember(Value = "css-box-shadow")]
            CssBoxShadow = 28,

            /// <summary>
            /// Enum CssBoxSizing for value: css-box-sizing
            /// </summary>
            [EnumMember(Value = "css-box-sizing")]
            CssBoxSizing = 29,

            /// <summary>
            /// Enum CssCaptionSide for value: css-caption-side
            /// </summary>
            [EnumMember(Value = "css-caption-side")]
            CssCaptionSide = 30,

            /// <summary>
            /// Enum CssClipPath for value: css-clip-path
            /// </summary>
            [EnumMember(Value = "css-clip-path")]
            CssClipPath = 31,

            /// <summary>
            /// Enum CssColumnCount for value: css-column-count
            /// </summary>
            [EnumMember(Value = "css-column-count")]
            CssColumnCount = 32,

            /// <summary>
            /// Enum CssColumnLayoutProperties for value: css-column-layout-properties
            /// </summary>
            [EnumMember(Value = "css-column-layout-properties")]
            CssColumnLayoutProperties = 33,

            /// <summary>
            /// Enum CssDirection for value: css-direction
            /// </summary>
            [EnumMember(Value = "css-direction")]
            CssDirection = 34,

            /// <summary>
            /// Enum CssDisplayFlex for value: css-display-flex
            /// </summary>
            [EnumMember(Value = "css-display-flex")]
            CssDisplayFlex = 35,

            /// <summary>
            /// Enum CssDisplayGrid for value: css-display-grid
            /// </summary>
            [EnumMember(Value = "css-display-grid")]
            CssDisplayGrid = 36,

            /// <summary>
            /// Enum CssDisplayNone for value: css-display-none
            /// </summary>
            [EnumMember(Value = "css-display-none")]
            CssDisplayNone = 37,

            /// <summary>
            /// Enum CssDisplay for value: css-display
            /// </summary>
            [EnumMember(Value = "css-display")]
            CssDisplay = 38,

            /// <summary>
            /// Enum CssFilter for value: css-filter
            /// </summary>
            [EnumMember(Value = "css-filter")]
            CssFilter = 39,

            /// <summary>
            /// Enum CssFlexDirection for value: css-flex-direction
            /// </summary>
            [EnumMember(Value = "css-flex-direction")]
            CssFlexDirection = 40,

            /// <summary>
            /// Enum CssFlexWrap for value: css-flex-wrap
            /// </summary>
            [EnumMember(Value = "css-flex-wrap")]
            CssFlexWrap = 41,

            /// <summary>
            /// Enum CssFloat for value: css-float
            /// </summary>
            [EnumMember(Value = "css-float")]
            CssFloat = 42,

            /// <summary>
            /// Enum CssFontKerning for value: css-font-kerning
            /// </summary>
            [EnumMember(Value = "css-font-kerning")]
            CssFontKerning = 43,

            /// <summary>
            /// Enum CssFontWeight for value: css-font-weight
            /// </summary>
            [EnumMember(Value = "css-font-weight")]
            CssFontWeight = 44,

            /// <summary>
            /// Enum CssFont for value: css-font
            /// </summary>
            [EnumMember(Value = "css-font")]
            CssFont = 45,

            /// <summary>
            /// Enum CssGap for value: css-gap
            /// </summary>
            [EnumMember(Value = "css-gap")]
            CssGap = 46,

            /// <summary>
            /// Enum CssGridTemplate for value: css-grid-template
            /// </summary>
            [EnumMember(Value = "css-grid-template")]
            CssGridTemplate = 47,

            /// <summary>
            /// Enum CssHeight for value: css-height
            /// </summary>
            [EnumMember(Value = "css-height")]
            CssHeight = 48,

            /// <summary>
            /// Enum CssHyphens for value: css-hyphens
            /// </summary>
            [EnumMember(Value = "css-hyphens")]
            CssHyphens = 49,

            /// <summary>
            /// Enum CssInlineSize for value: css-inline-size
            /// </summary>
            [EnumMember(Value = "css-inline-size")]
            CssInlineSize = 50,

            /// <summary>
            /// Enum CssJustifyContent for value: css-justify-content
            /// </summary>
            [EnumMember(Value = "css-justify-content")]
            CssJustifyContent = 51,

            /// <summary>
            /// Enum CssLeftRightTopBottom for value: css-left-right-top-bottom
            /// </summary>
            [EnumMember(Value = "css-left-right-top-bottom")]
            CssLeftRightTopBottom = 52,

            /// <summary>
            /// Enum CssLetterSpacing for value: css-letter-spacing
            /// </summary>
            [EnumMember(Value = "css-letter-spacing")]
            CssLetterSpacing = 53,

            /// <summary>
            /// Enum CssLineHeight for value: css-line-height
            /// </summary>
            [EnumMember(Value = "css-line-height")]
            CssLineHeight = 54,

            /// <summary>
            /// Enum CssListStyleImage for value: css-list-style-image
            /// </summary>
            [EnumMember(Value = "css-list-style-image")]
            CssListStyleImage = 55,

            /// <summary>
            /// Enum CssListStylePosition for value: css-list-style-position
            /// </summary>
            [EnumMember(Value = "css-list-style-position")]
            CssListStylePosition = 56,

            /// <summary>
            /// Enum CssListStyleType for value: css-list-style-type
            /// </summary>
            [EnumMember(Value = "css-list-style-type")]
            CssListStyleType = 57,

            /// <summary>
            /// Enum CssListStyle for value: css-list-style
            /// </summary>
            [EnumMember(Value = "css-list-style")]
            CssListStyle = 58,

            /// <summary>
            /// Enum CssMarginBlockStartEnd for value: css-margin-block-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-block-start-end")]
            CssMarginBlockStartEnd = 59,

            /// <summary>
            /// Enum CssMarginInlineBlock for value: css-margin-inline-block
            /// </summary>
            [EnumMember(Value = "css-margin-inline-block")]
            CssMarginInlineBlock = 60,

            /// <summary>
            /// Enum CssMarginInlineStartEnd for value: css-margin-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-margin-inline-start-end")]
            CssMarginInlineStartEnd = 61,

            /// <summary>
            /// Enum CssMarginInline for value: css-margin-inline
            /// </summary>
            [EnumMember(Value = "css-margin-inline")]
            CssMarginInline = 62,

            /// <summary>
            /// Enum CssMargin for value: css-margin
            /// </summary>
            [EnumMember(Value = "css-margin")]
            CssMargin = 63,

            /// <summary>
            /// Enum CssMaxBlockSize for value: css-max-block-size
            /// </summary>
            [EnumMember(Value = "css-max-block-size")]
            CssMaxBlockSize = 64,

            /// <summary>
            /// Enum CssMaxHeight for value: css-max-height
            /// </summary>
            [EnumMember(Value = "css-max-height")]
            CssMaxHeight = 65,

            /// <summary>
            /// Enum CssMaxWidth for value: css-max-width
            /// </summary>
            [EnumMember(Value = "css-max-width")]
            CssMaxWidth = 66,

            /// <summary>
            /// Enum CssMinHeight for value: css-min-height
            /// </summary>
            [EnumMember(Value = "css-min-height")]
            CssMinHeight = 67,

            /// <summary>
            /// Enum CssMinInlineSize for value: css-min-inline-size
            /// </summary>
            [EnumMember(Value = "css-min-inline-size")]
            CssMinInlineSize = 68,

            /// <summary>
            /// Enum CssMinWidth for value: css-min-width
            /// </summary>
            [EnumMember(Value = "css-min-width")]
            CssMinWidth = 69,

            /// <summary>
            /// Enum CssMixBlendMode for value: css-mix-blend-mode
            /// </summary>
            [EnumMember(Value = "css-mix-blend-mode")]
            CssMixBlendMode = 70,

            /// <summary>
            /// Enum CssObjectFit for value: css-object-fit
            /// </summary>
            [EnumMember(Value = "css-object-fit")]
            CssObjectFit = 71,

            /// <summary>
            /// Enum CssObjectPosition for value: css-object-position
            /// </summary>
            [EnumMember(Value = "css-object-position")]
            CssObjectPosition = 72,

            /// <summary>
            /// Enum CssOpacity for value: css-opacity
            /// </summary>
            [EnumMember(Value = "css-opacity")]
            CssOpacity = 73,

            /// <summary>
            /// Enum CssOutlineOffset for value: css-outline-offset
            /// </summary>
            [EnumMember(Value = "css-outline-offset")]
            CssOutlineOffset = 74,

            /// <summary>
            /// Enum CssOutline for value: css-outline
            /// </summary>
            [EnumMember(Value = "css-outline")]
            CssOutline = 75,

            /// <summary>
            /// Enum CssOverflowWrap for value: css-overflow-wrap
            /// </summary>
            [EnumMember(Value = "css-overflow-wrap")]
            CssOverflowWrap = 76,

            /// <summary>
            /// Enum CssOverflow for value: css-overflow
            /// </summary>
            [EnumMember(Value = "css-overflow")]
            CssOverflow = 77,

            /// <summary>
            /// Enum CssPaddingBlockStartEnd for value: css-padding-block-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-block-start-end")]
            CssPaddingBlockStartEnd = 78,

            /// <summary>
            /// Enum CssPaddingInlineBlock for value: css-padding-inline-block
            /// </summary>
            [EnumMember(Value = "css-padding-inline-block")]
            CssPaddingInlineBlock = 79,

            /// <summary>
            /// Enum CssPaddingInlineStartEnd for value: css-padding-inline-start-end
            /// </summary>
            [EnumMember(Value = "css-padding-inline-start-end")]
            CssPaddingInlineStartEnd = 80,

            /// <summary>
            /// Enum CssPadding for value: css-padding
            /// </summary>
            [EnumMember(Value = "css-padding")]
            CssPadding = 81,

            /// <summary>
            /// Enum CssPosition for value: css-position
            /// </summary>
            [EnumMember(Value = "css-position")]
            CssPosition = 82,

            /// <summary>
            /// Enum CssTabSize for value: css-tab-size
            /// </summary>
            [EnumMember(Value = "css-tab-size")]
            CssTabSize = 83,

            /// <summary>
            /// Enum CssTableLayout for value: css-table-layout
            /// </summary>
            [EnumMember(Value = "css-table-layout")]
            CssTableLayout = 84,

            /// <summary>
            /// Enum CssTextAlignLast for value: css-text-align-last
            /// </summary>
            [EnumMember(Value = "css-text-align-last")]
            CssTextAlignLast = 85,

            /// <summary>
            /// Enum CssTextAlign for value: css-text-align
            /// </summary>
            [EnumMember(Value = "css-text-align")]
            CssTextAlign = 86,

            /// <summary>
            /// Enum CssTextDecorationColor for value: css-text-decoration-color
            /// </summary>
            [EnumMember(Value = "css-text-decoration-color")]
            CssTextDecorationColor = 87,

            /// <summary>
            /// Enum CssTextDecorationThickness for value: css-text-decoration-thickness
            /// </summary>
            [EnumMember(Value = "css-text-decoration-thickness")]
            CssTextDecorationThickness = 88,

            /// <summary>
            /// Enum CssTextDecoration for value: css-text-decoration
            /// </summary>
            [EnumMember(Value = "css-text-decoration")]
            CssTextDecoration = 89,

            /// <summary>
            /// Enum CssTextEmphasisPosition for value: css-text-emphasis-position
            /// </summary>
            [EnumMember(Value = "css-text-emphasis-position")]
            CssTextEmphasisPosition = 90,

            /// <summary>
            /// Enum CssTextEmphasis for value: css-text-emphasis
            /// </summary>
            [EnumMember(Value = "css-text-emphasis")]
            CssTextEmphasis = 91,

            /// <summary>
            /// Enum CssTextIndent for value: css-text-indent
            /// </summary>
            [EnumMember(Value = "css-text-indent")]
            CssTextIndent = 92,

            /// <summary>
            /// Enum CssTextOverflow for value: css-text-overflow
            /// </summary>
            [EnumMember(Value = "css-text-overflow")]
            CssTextOverflow = 93,

            /// <summary>
            /// Enum CssTextShadow for value: css-text-shadow
            /// </summary>
            [EnumMember(Value = "css-text-shadow")]
            CssTextShadow = 94,

            /// <summary>
            /// Enum CssTextTransform for value: css-text-transform
            /// </summary>
            [EnumMember(Value = "css-text-transform")]
            CssTextTransform = 95,

            /// <summary>
            /// Enum CssTextUnderlineOffset for value: css-text-underline-offset
            /// </summary>
            [EnumMember(Value = "css-text-underline-offset")]
            CssTextUnderlineOffset = 96,

            /// <summary>
            /// Enum CssTransform for value: css-transform
            /// </summary>
            [EnumMember(Value = "css-transform")]
            CssTransform = 97,

            /// <summary>
            /// Enum CssVerticalAlign for value: css-vertical-align
            /// </summary>
            [EnumMember(Value = "css-vertical-align")]
            CssVerticalAlign = 98,

            /// <summary>
            /// Enum CssVisibility for value: css-visibility
            /// </summary>
            [EnumMember(Value = "css-visibility")]
            CssVisibility = 99,

            /// <summary>
            /// Enum CssWhiteSpace for value: css-white-space
            /// </summary>
            [EnumMember(Value = "css-white-space")]
            CssWhiteSpace = 100,

            /// <summary>
            /// Enum CssWidth for value: css-width
            /// </summary>
            [EnumMember(Value = "css-width")]
            CssWidth = 101,

            /// <summary>
            /// Enum CssWordBreak for value: css-word-break
            /// </summary>
            [EnumMember(Value = "css-word-break")]
            CssWordBreak = 102,

            /// <summary>
            /// Enum CssWritingMode for value: css-writing-mode
            /// </summary>
            [EnumMember(Value = "css-writing-mode")]
            CssWritingMode = 103,

            /// <summary>
            /// Enum CssZIndex for value: css-z-index
            /// </summary>
            [EnumMember(Value = "css-z-index")]
            CssZIndex = 104,

            /// <summary>
            /// Enum HtmlAbbr for value: html-abbr
            /// </summary>
            [EnumMember(Value = "html-abbr")]
            HtmlAbbr = 105,

            /// <summary>
            /// Enum HtmlAddress for value: html-address
            /// </summary>
            [EnumMember(Value = "html-address")]
            HtmlAddress = 106,

            /// <summary>
            /// Enum HtmlAlign for value: html-align
            /// </summary>
            [EnumMember(Value = "html-align")]
            HtmlAlign = 107,

            /// <summary>
            /// Enum HtmlAnchorLinks for value: html-anchor-links
            /// </summary>
            [EnumMember(Value = "html-anchor-links")]
            HtmlAnchorLinks = 108,

            /// <summary>
            /// Enum HtmlAriaDescribedby for value: html-aria-describedby
            /// </summary>
            [EnumMember(Value = "html-aria-describedby")]
            HtmlAriaDescribedby = 109,

            /// <summary>
            /// Enum HtmlAriaHidden for value: html-aria-hidden
            /// </summary>
            [EnumMember(Value = "html-aria-hidden")]
            HtmlAriaHidden = 110,

            /// <summary>
            /// Enum HtmlAriaLabel for value: html-aria-label
            /// </summary>
            [EnumMember(Value = "html-aria-label")]
            HtmlAriaLabel = 111,

            /// <summary>
            /// Enum HtmlAriaLabelledby for value: html-aria-labelledby
            /// </summary>
            [EnumMember(Value = "html-aria-labelledby")]
            HtmlAriaLabelledby = 112,

            /// <summary>
            /// Enum HtmlAriaLive for value: html-aria-live
            /// </summary>
            [EnumMember(Value = "html-aria-live")]
            HtmlAriaLive = 113,

            /// <summary>
            /// Enum HtmlAudio for value: html-audio
            /// </summary>
            [EnumMember(Value = "html-audio")]
            HtmlAudio = 114,

            /// <summary>
            /// Enum HtmlBackground for value: html-background
            /// </summary>
            [EnumMember(Value = "html-background")]
            HtmlBackground = 115,

            /// <summary>
            /// Enum HtmlBase for value: html-base
            /// </summary>
            [EnumMember(Value = "html-base")]
            HtmlBase = 116,

            /// <summary>
            /// Enum HtmlBlockquote for value: html-blockquote
            /// </summary>
            [EnumMember(Value = "html-blockquote")]
            HtmlBlockquote = 117,

            /// <summary>
            /// Enum HtmlBody for value: html-body
            /// </summary>
            [EnumMember(Value = "html-body")]
            HtmlBody = 118,

            /// <summary>
            /// Enum HtmlButtonReset for value: html-button-reset
            /// </summary>
            [EnumMember(Value = "html-button-reset")]
            HtmlButtonReset = 119,

            /// <summary>
            /// Enum HtmlButtonSubmit for value: html-button-submit
            /// </summary>
            [EnumMember(Value = "html-button-submit")]
            HtmlButtonSubmit = 120,

            /// <summary>
            /// Enum HtmlCode for value: html-code
            /// </summary>
            [EnumMember(Value = "html-code")]
            HtmlCode = 121,

            /// <summary>
            /// Enum HtmlDel for value: html-del
            /// </summary>
            [EnumMember(Value = "html-del")]
            HtmlDel = 122,

            /// <summary>
            /// Enum HtmlDfn for value: html-dfn
            /// </summary>
            [EnumMember(Value = "html-dfn")]
            HtmlDfn = 123,

            /// <summary>
            /// Enum HtmlDialog for value: html-dialog
            /// </summary>
            [EnumMember(Value = "html-dialog")]
            HtmlDialog = 124,

            /// <summary>
            /// Enum HtmlDir for value: html-dir
            /// </summary>
            [EnumMember(Value = "html-dir")]
            HtmlDir = 125,

            /// <summary>
            /// Enum HtmlDiv for value: html-div
            /// </summary>
            [EnumMember(Value = "html-div")]
            HtmlDiv = 126,

            /// <summary>
            /// Enum HtmlDoctype for value: html-doctype
            /// </summary>
            [EnumMember(Value = "html-doctype")]
            HtmlDoctype = 127,

            /// <summary>
            /// Enum HtmlForm for value: html-form
            /// </summary>
            [EnumMember(Value = "html-form")]
            HtmlForm = 128,

            /// <summary>
            /// Enum HtmlH1H6 for value: html-h1-h6
            /// </summary>
            [EnumMember(Value = "html-h1-h6")]
            HtmlH1H6 = 129,

            /// <summary>
            /// Enum HtmlHeight for value: html-height
            /// </summary>
            [EnumMember(Value = "html-height")]
            HtmlHeight = 130,

            /// <summary>
            /// Enum HtmlImageMaps for value: html-image-maps
            /// </summary>
            [EnumMember(Value = "html-image-maps")]
            HtmlImageMaps = 131,

            /// <summary>
            /// Enum HtmlInputCheckbox for value: html-input-checkbox
            /// </summary>
            [EnumMember(Value = "html-input-checkbox")]
            HtmlInputCheckbox = 132,

            /// <summary>
            /// Enum HtmlInputHidden for value: html-input-hidden
            /// </summary>
            [EnumMember(Value = "html-input-hidden")]
            HtmlInputHidden = 133,

            /// <summary>
            /// Enum HtmlInputRadio for value: html-input-radio
            /// </summary>
            [EnumMember(Value = "html-input-radio")]
            HtmlInputRadio = 134,

            /// <summary>
            /// Enum HtmlInputReset for value: html-input-reset
            /// </summary>
            [EnumMember(Value = "html-input-reset")]
            HtmlInputReset = 135,

            /// <summary>
            /// Enum HtmlInputSubmit for value: html-input-submit
            /// </summary>
            [EnumMember(Value = "html-input-submit")]
            HtmlInputSubmit = 136,

            /// <summary>
            /// Enum HtmlInputText for value: html-input-text
            /// </summary>
            [EnumMember(Value = "html-input-text")]
            HtmlInputText = 137,

            /// <summary>
            /// Enum HtmlLang for value: html-lang
            /// </summary>
            [EnumMember(Value = "html-lang")]
            HtmlLang = 138,

            /// <summary>
            /// Enum HtmlLink for value: html-link
            /// </summary>
            [EnumMember(Value = "html-link")]
            HtmlLink = 139,

            /// <summary>
            /// Enum HtmlLists for value: html-lists
            /// </summary>
            [EnumMember(Value = "html-lists")]
            HtmlLists = 140,

            /// <summary>
            /// Enum HtmlLoadingAttribute for value: html-loading-attribute
            /// </summary>
            [EnumMember(Value = "html-loading-attribute")]
            HtmlLoadingAttribute = 141,

            /// <summary>
            /// Enum HtmlMailtoLinks for value: html-mailto-links
            /// </summary>
            [EnumMember(Value = "html-mailto-links")]
            HtmlMailtoLinks = 142,

            /// <summary>
            /// Enum HtmlMarquee for value: html-marquee
            /// </summary>
            [EnumMember(Value = "html-marquee")]
            HtmlMarquee = 143,

            /// <summary>
            /// Enum HtmlMeter for value: html-meter
            /// </summary>
            [EnumMember(Value = "html-meter")]
            HtmlMeter = 144,

            /// <summary>
            /// Enum HtmlObject for value: html-object
            /// </summary>
            [EnumMember(Value = "html-object")]
            HtmlObject = 145,

            /// <summary>
            /// Enum HtmlP for value: html-p
            /// </summary>
            [EnumMember(Value = "html-p")]
            HtmlP = 146,

            /// <summary>
            /// Enum HtmlPicture for value: html-picture
            /// </summary>
            [EnumMember(Value = "html-picture")]
            HtmlPicture = 147,

            /// <summary>
            /// Enum HtmlPre for value: html-pre
            /// </summary>
            [EnumMember(Value = "html-pre")]
            HtmlPre = 148,

            /// <summary>
            /// Enum HtmlProgress for value: html-progress
            /// </summary>
            [EnumMember(Value = "html-progress")]
            HtmlProgress = 149,

            /// <summary>
            /// Enum HtmlRequired for value: html-required
            /// </summary>
            [EnumMember(Value = "html-required")]
            HtmlRequired = 150,

            /// <summary>
            /// Enum HtmlRole for value: html-role
            /// </summary>
            [EnumMember(Value = "html-role")]
            HtmlRole = 151,

            /// <summary>
            /// Enum HtmlRp for value: html-rp
            /// </summary>
            [EnumMember(Value = "html-rp")]
            HtmlRp = 152,

            /// <summary>
            /// Enum HtmlRt for value: html-rt
            /// </summary>
            [EnumMember(Value = "html-rt")]
            HtmlRt = 153,

            /// <summary>
            /// Enum HtmlRuby for value: html-ruby
            /// </summary>
            [EnumMember(Value = "html-ruby")]
            HtmlRuby = 154,

            /// <summary>
            /// Enum HtmlSelect for value: html-select
            /// </summary>
            [EnumMember(Value = "html-select")]
            HtmlSelect = 155,

            /// <summary>
            /// Enum HtmlSemantics for value: html-semantics
            /// </summary>
            [EnumMember(Value = "html-semantics")]
            HtmlSemantics = 156,

            /// <summary>
            /// Enum HtmlSmall for value: html-small
            /// </summary>
            [EnumMember(Value = "html-small")]
            HtmlSmall = 157,

            /// <summary>
            /// Enum HtmlSpan for value: html-span
            /// </summary>
            [EnumMember(Value = "html-span")]
            HtmlSpan = 158,

            /// <summary>
            /// Enum HtmlSrcset for value: html-srcset
            /// </summary>
            [EnumMember(Value = "html-srcset")]
            HtmlSrcset = 159,

            /// <summary>
            /// Enum HtmlStrike for value: html-strike
            /// </summary>
            [EnumMember(Value = "html-strike")]
            HtmlStrike = 160,

            /// <summary>
            /// Enum HtmlStrong for value: html-strong
            /// </summary>
            [EnumMember(Value = "html-strong")]
            HtmlStrong = 161,

            /// <summary>
            /// Enum HtmlStyle for value: html-style
            /// </summary>
            [EnumMember(Value = "html-style")]
            HtmlStyle = 162,

            /// <summary>
            /// Enum HtmlSvg for value: html-svg
            /// </summary>
            [EnumMember(Value = "html-svg")]
            HtmlSvg = 163,

            /// <summary>
            /// Enum HtmlTable for value: html-table
            /// </summary>
            [EnumMember(Value = "html-table")]
            HtmlTable = 164,

            /// <summary>
            /// Enum HtmlTarget for value: html-target
            /// </summary>
            [EnumMember(Value = "html-target")]
            HtmlTarget = 165,

            /// <summary>
            /// Enum HtmlTextarea for value: html-textarea
            /// </summary>
            [EnumMember(Value = "html-textarea")]
            HtmlTextarea = 166,

            /// <summary>
            /// Enum HtmlValign for value: html-valign
            /// </summary>
            [EnumMember(Value = "html-valign")]
            HtmlValign = 167,

            /// <summary>
            /// Enum HtmlVideo for value: html-video
            /// </summary>
            [EnumMember(Value = "html-video")]
            HtmlVideo = 168,

            /// <summary>
            /// Enum HtmlWbr for value: html-wbr
            /// </summary>
            [EnumMember(Value = "html-wbr")]
            HtmlWbr = 169,

            /// <summary>
            /// Enum HtmlWidth for value: html-width
            /// </summary>
            [EnumMember(Value = "html-width")]
            HtmlWidth = 170,

            /// <summary>
            /// Enum ImageAvif for value: image-avif
            /// </summary>
            [EnumMember(Value = "image-avif")]
            ImageAvif = 171,

            /// <summary>
            /// Enum ImageBase64 for value: image-base64
            /// </summary>
            [EnumMember(Value = "image-base64")]
            ImageBase64 = 172,

            /// <summary>
            /// Enum ImageBmp for value: image-bmp
            /// </summary>
            [EnumMember(Value = "image-bmp")]
            ImageBmp = 173,

            /// <summary>
            /// Enum ImageGif for value: image-gif
            /// </summary>
            [EnumMember(Value = "image-gif")]
            ImageGif = 174,

            /// <summary>
            /// Enum ImageIco for value: image-ico
            /// </summary>
            [EnumMember(Value = "image-ico")]
            ImageIco = 175,

            /// <summary>
            /// Enum ImageJpg for value: image-jpg
            /// </summary>
            [EnumMember(Value = "image-jpg")]
            ImageJpg = 176,

            /// <summary>
            /// Enum ImagePng for value: image-png
            /// </summary>
            [EnumMember(Value = "image-png")]
            ImagePng = 177,

            /// <summary>
            /// Enum ImageSvg for value: image-svg
            /// </summary>
            [EnumMember(Value = "image-svg")]
            ImageSvg = 178,

            /// <summary>
            /// Enum ImageWebp for value: image-webp
            /// </summary>
            [EnumMember(Value = "image-webp")]
            ImageWebp = 179,

            /// <summary>
            /// Enum Unsupported for value: unsupported
            /// </summary>
            [EnumMember(Value = "unsupported")]
            Unsupported = 180

        }


        /// <summary>
        /// Gets or Sets Feature
        /// </summary>
        [DataMember(Name = "feature", IsRequired = true, EmitDefaultValue = true)]
        public FeatureEnum Feature { get; set; }
        /// <summary>
        /// Defines Family
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FamilyEnum
        {
            /// <summary>
            /// Enum Aol for value: aol
            /// </summary>
            [EnumMember(Value = "aol")]
            Aol = 1,

            /// <summary>
            /// Enum AppleMail for value: apple-mail
            /// </summary>
            [EnumMember(Value = "apple-mail")]
            AppleMail = 2,

            /// <summary>
            /// Enum Fastmail for value: fastmail
            /// </summary>
            [EnumMember(Value = "fastmail")]
            Fastmail = 3,

            /// <summary>
            /// Enum FreeFr for value: free-fr
            /// </summary>
            [EnumMember(Value = "free-fr")]
            FreeFr = 4,

            /// <summary>
            /// Enum Gmail for value: gmail
            /// </summary>
            [EnumMember(Value = "gmail")]
            Gmail = 5,

            /// <summary>
            /// Enum Gmx for value: gmx
            /// </summary>
            [EnumMember(Value = "gmx")]
            Gmx = 6,

            /// <summary>
            /// Enum Hey for value: hey
            /// </summary>
            [EnumMember(Value = "hey")]
            Hey = 7,

            /// <summary>
            /// Enum Ionos1and1 for value: ionos-1and1
            /// </summary>
            [EnumMember(Value = "ionos-1and1")]
            Ionos1and1 = 8,

            /// <summary>
            /// Enum Laposte for value: laposte
            /// </summary>
            [EnumMember(Value = "laposte")]
            Laposte = 9,

            /// <summary>
            /// Enum MailRu for value: mail-ru
            /// </summary>
            [EnumMember(Value = "mail-ru")]
            MailRu = 10,

            /// <summary>
            /// Enum Microsoft for value: microsoft
            /// </summary>
            [EnumMember(Value = "microsoft")]
            Microsoft = 11,

            /// <summary>
            /// Enum Orange for value: orange
            /// </summary>
            [EnumMember(Value = "orange")]
            Orange = 12,

            /// <summary>
            /// Enum Outlook for value: outlook
            /// </summary>
            [EnumMember(Value = "outlook")]
            Outlook = 13,

            /// <summary>
            /// Enum Protonmail for value: protonmail
            /// </summary>
            [EnumMember(Value = "protonmail")]
            Protonmail = 14,

            /// <summary>
            /// Enum Rainloop for value: rainloop
            /// </summary>
            [EnumMember(Value = "rainloop")]
            Rainloop = 15,

            /// <summary>
            /// Enum SamsungEmail for value: samsung-email
            /// </summary>
            [EnumMember(Value = "samsung-email")]
            SamsungEmail = 16,

            /// <summary>
            /// Enum Sfr for value: sfr
            /// </summary>
            [EnumMember(Value = "sfr")]
            Sfr = 17,

            /// <summary>
            /// Enum TOnlineDe for value: t-online-de
            /// </summary>
            [EnumMember(Value = "t-online-de")]
            TOnlineDe = 18,

            /// <summary>
            /// Enum Thunderbird for value: thunderbird
            /// </summary>
            [EnumMember(Value = "thunderbird")]
            Thunderbird = 19,

            /// <summary>
            /// Enum WebDe for value: web-de
            /// </summary>
            [EnumMember(Value = "web-de")]
            WebDe = 20,

            /// <summary>
            /// Enum Yahoo for value: yahoo
            /// </summary>
            [EnumMember(Value = "yahoo")]
            Yahoo = 21

        }


        /// <summary>
        /// Gets or Sets Family
        /// </summary>
        [DataMember(Name = "family", IsRequired = true, EmitDefaultValue = true)]
        public FamilyEnum Family { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureFamilyStatistics" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureFamilyStatistics() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureFamilyStatistics" /> class.
        /// </summary>
        /// <param name="feature">feature (required).</param>
        /// <param name="family">family (required).</param>
        /// <param name="platforms">platforms (required).</param>
        public EmailFeatureFamilyStatistics(FeatureEnum feature = default(FeatureEnum), FamilyEnum family = default(FamilyEnum), List<EmailFeaturePlatformStatistics> platforms = default(List<EmailFeaturePlatformStatistics>))
        {
            this.Feature = feature;
            this.Family = family;
            // to ensure "platforms" is required (not null)
            if (platforms == null)
            {
                throw new ArgumentNullException("platforms is a required property for EmailFeatureFamilyStatistics and cannot be null");
            }
            this.Platforms = platforms;
        }

        /// <summary>
        /// Gets or Sets Platforms
        /// </summary>
        [DataMember(Name = "platforms", IsRequired = true, EmitDefaultValue = true)]
        public List<EmailFeaturePlatformStatistics> Platforms { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureFamilyStatistics {\n");
            sb.Append("  Feature: ").Append(Feature).Append("\n");
            sb.Append("  Family: ").Append(Family).Append("\n");
            sb.Append("  Platforms: ").Append(Platforms).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureFamilyStatistics);
        }

        /// <summary>
        /// Returns true if EmailFeatureFamilyStatistics instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureFamilyStatistics to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureFamilyStatistics input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Feature == input.Feature ||
                    this.Feature.Equals(input.Feature)
                ) && 
                (
                    this.Family == input.Family ||
                    this.Family.Equals(input.Family)
                ) && 
                (
                    this.Platforms == input.Platforms ||
                    this.Platforms != null &&
                    input.Platforms != null &&
                    this.Platforms.SequenceEqual(input.Platforms)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Feature.GetHashCode();
                hashCode = (hashCode * 59) + this.Family.GetHashCode();
                if (this.Platforms != null)
                {
                    hashCode = (hashCode * 59) + this.Platforms.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureFamilyName.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureFamilyName
    /// </summary>
    [DataContract(Name = "EmailFeatureFamilyName")]
    public partial class EmailFeatureFamilyName : IEquatable<EmailFeatureFamilyName>, IValidatableObject
    {
        /// <summary>
        /// Defines Slug
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SlugEnum
        {
            /// <summary>
            /// Enum Aol for value: aol
            /// </summary>
            [EnumMember(Value = "aol")]
            Aol = 1,

            /// <summary>
            /// Enum AppleMail for value: apple-mail
            /// </summary>
            [EnumMember(Value = "apple-mail")]
            AppleMail = 2,

            /// <summary>
            /// Enum Fastmail for value: fastmail
            /// </summary>
            [EnumMember(Value = "fastmail")]
            Fastmail = 3,

            /// <summary>
            /// Enum FreeFr for value: free-fr
            /// </summary>
            [EnumMember(Value = "free-fr")]
            FreeFr = 4,

            /// <summary>
            /// Enum Gmail for value: gmail
            /// </summary>
            [EnumMember(Value = "gmail")]
            Gmail = 5,

            /// <summary>
            /// Enum Gmx for value: gmx
            /// </summary>
            [EnumMember(Value = "gmx")]
            Gmx = 6,

            /// <summary>
            /// Enum Hey for value: hey
            /// </summary>
            [EnumMember(Value = "hey")]
            Hey = 7,

            /// <summary>
            /// Enum Ionos1and1 for value: ionos-1and1
            /// </summary>
            [EnumMember(Value = "ionos-1and1")]
            Ionos1and1 = 8,

            /// <summary>
            /// Enum Laposte for value: laposte
            /// </summary>
            [EnumMember(Value = "laposte")]
            Laposte = 9,

            /// <summary>
            /// Enum MailRu for value: mail-ru
            /// </summary>
            [EnumMember(Value = "mail-ru")]
            MailRu = 10,

            /// <summary>
            /// Enum Microsoft for value: microsoft
            /// </summary>
            [EnumMember(Value = "microsoft")]
            Microsoft = 11,

            /// <summary>
            /// Enum Orange for value: orange
            /// </summary>
            [EnumMember(Value = "orange")]
            Orange = 12,

            /// <summary>
            /// Enum Outlook for value: outlook
            /// </summary>
            [EnumMember(Value = "outlook")]
            Outlook = 13,

            /// <summary>
            /// Enum Protonmail for value: protonmail
            /// </summary>
            [EnumMember(Value = "protonmail")]
            Protonmail = 14,

            /// <summary>
            /// Enum Rainloop for value: rainloop
            /// </summary>
            [EnumMember(Value = "rainloop")]
            Rainloop = 15,

            /// <summary>
            /// Enum SamsungEmail for value: samsung-email
            /// </summary>
            [EnumMember(Value = "samsung-email")]
            SamsungEmail = 16,

            /// <summary>
            /// Enum Sfr for value: sfr
            /// </summary>
            [EnumMember(Value = "sfr")]
            Sfr = 17,

            /// <summary>
            /// Enum TOnlineDe for value: t-online-de
            /// </summary>
            [EnumMember(Value = "t-online-de")]
            TOnlineDe = 18,

            /// <summary>
            /// Enum Thunderbird for value: thunderbird
            /// </summary>
            [EnumMember(Value = "thunderbird")]
            Thunderbird = 19,

            /// <summary>
            /// Enum WebDe for value: web-de
            /// </summary>
            [EnumMember(Value = "web-de")]
            WebDe = 20,

            /// <summary>
            /// Enum Yahoo for value: yahoo
            /// </summary>
            [EnumMember(Value = "yahoo")]
            Yahoo = 21

        }


        /// <summary>
        /// Gets or Sets Slug
        /// </summary>
        [DataMember(Name = "slug", IsRequired = true, EmitDefaultValue = true)]
        public SlugEnum Slug { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureFamilyName" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureFamilyName() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureFamilyName" /> class.
        /// </summary>
        /// <param name="slug">slug (required).</param>
        /// <param name="name">name (required).</param>
        public EmailFeatureFamilyName(SlugEnum slug = default(SlugEnum), string name = default(string))
        {
            this.Slug = slug;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for EmailFeatureFamilyName and cannot be null");
            }
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureFamilyName {\n");
            sb.Append("  Slug: ").Append(Slug).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureFamilyName);
        }

        /// <summary>
        /// Returns true if EmailFeatureFamilyName instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureFamilyName to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureFamilyName input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Slug == input.Slug ||
                    this.Slug.Equals(input.Slug)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Slug.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailFeatureCategoryName.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailFeatureCategoryName
    /// </summary>
    [DataContract(Name = "EmailFeatureCategoryName")]
    public partial class EmailFeatureCategoryName : IEquatable<EmailFeatureCategoryName>, IValidatableObject
    {
        /// <summary>
        /// Defines Slug
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SlugEnum
        {
            /// <summary>
            /// Enum Css for value: css
            /// </summary>
            [EnumMember(Value = "css")]
            Css = 1,

            /// <summary>
            /// Enum Html for value: html
            /// </summary>
            [EnumMember(Value = "html")]
            Html = 2,

            /// <summary>
            /// Enum Image for value: image
            /// </summary>
            [EnumMember(Value = "image")]
            Image = 3,

            /// <summary>
            /// Enum Others for value: others
            /// </summary>
            [EnumMember(Value = "others")]
            Others = 4

        }


        /// <summary>
        /// Gets or Sets Slug
        /// </summary>
        [DataMember(Name = "slug", IsRequired = true, EmitDefaultValue = true)]
        public SlugEnum Slug { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureCategoryName" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailFeatureCategoryName() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailFeatureCategoryName" /> class.
        /// </summary>
        /// <param name="slug">slug (required).</param>
        /// <param name="name">name (required).</param>
        public EmailFeatureCategoryName(SlugEnum slug = default(SlugEnum), string name = default(string))
        {
            this.Slug = slug;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for EmailFeatureCategoryName and cannot be null");
            }
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailFeatureCategoryName {\n");
            sb.Append("  Slug: ").Append(Slug).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailFeatureCategoryName);
        }

        /// <summary>
        /// Returns true if EmailFeatureCategoryName instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailFeatureCategoryName to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailFeatureCategoryName input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Slug == input.Slug ||
                    this.Slug.Equals(input.Slug)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Slug.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailContentPartResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailContentPartResult
    /// </summary>
    [DataContract(Name = "EmailContentPartResult")]
    public partial class EmailContentPartResult : IEquatable<EmailContentPartResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailContentPartResult" /> class.
        /// </summary>
        /// <param name="content">content.</param>
        public EmailContentPartResult(string content = default(string))
        {
            this.Content = content;
        }

        /// <summary>
        /// Gets or Sets Content
        /// </summary>
        [DataMember(Name = "content", EmitDefaultValue = true)]
        public string Content { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailContentPartResult {\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailContentPartResult);
        }

        /// <summary>
        /// Returns true if EmailContentPartResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailContentPartResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailContentPartResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Content == input.Content ||
                    (this.Content != null &&
                    this.Content.Equals(input.Content))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailContentMatchResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Matches for the given pattern
    /// </summary>
    [DataContract(Name = "EmailContentMatchResult")]
    public partial class EmailContentMatchResult : IEquatable<EmailContentMatchResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailContentMatchResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailContentMatchResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailContentMatchResult" /> class.
        /// </summary>
        /// <param name="pattern">pattern (required).</param>
        /// <param name="matches">matches (required).</param>
        public EmailContentMatchResult(string pattern = default(string), List<string> matches = default(List<string>))
        {
            // to ensure "pattern" is required (not null)
            if (pattern == null)
            {
                throw new ArgumentNullException("pattern is a required property for EmailContentMatchResult and cannot be null");
            }
            this.Pattern = pattern;
            // to ensure "matches" is required (not null)
            if (matches == null)
            {
                throw new ArgumentNullException("matches is a required property for EmailContentMatchResult and cannot be null");
            }
            this.Matches = matches;
        }

        /// <summary>
        /// Gets or Sets Pattern
        /// </summary>
        [DataMember(Name = "pattern", IsRequired = true, EmitDefaultValue = true)]
        public string Pattern { get; set; }

        /// <summary>
        /// Gets or Sets Matches
        /// </summary>
        [DataMember(Name = "matches", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Matches { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailContentMatchResult {\n");
            sb.Append("  Pattern: ").Append(Pattern).Append("\n");
            sb.Append("  Matches: ").Append(Matches).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailContentMatchResult);
        }

        /// <summary>
        /// Returns true if EmailContentMatchResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailContentMatchResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailContentMatchResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Pattern == input.Pattern ||
                    (this.Pattern != null &&
                    this.Pattern.Equals(input.Pattern))
                ) && 
                (
                    this.Matches == input.Matches ||
                    this.Matches != null &&
                    input.Matches != null &&
                    this.Matches.SequenceEqual(input.Matches)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Pattern != null)
                {
                    hashCode = (hashCode * 59) + this.Pattern.GetHashCode();
                }
                if (this.Matches != null)
                {
                    hashCode = (hashCode * 59) + this.Matches.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailAvailableResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// EmailAvailableResult
    /// </summary>
    [DataContract(Name = "EmailAvailableResult")]
    public partial class EmailAvailableResult : IEquatable<EmailAvailableResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailAvailableResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected EmailAvailableResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailAvailableResult" /> class.
        /// </summary>
        /// <param name="available">available (required).</param>
        public EmailAvailableResult(bool available = default(bool))
        {
            this.Available = available;
        }

        /// <summary>
        /// Gets or Sets Available
        /// </summary>
        [DataMember(Name = "available", IsRequired = true, EmitDefaultValue = true)]
        public bool Available { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailAvailableResult {\n");
            sb.Append("  Available: ").Append(Available).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailAvailableResult);
        }

        /// <summary>
        /// Returns true if EmailAvailableResult instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailAvailableResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailAvailableResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Available == input.Available ||
                    this.Available.Equals(input.Available)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Available.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/EmailAnalysis.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Analysis result for email. Each verdict property is a string PASS|FAIL|GRAY or dynamic error message
    /// </summary>
    [DataContract(Name = "EmailAnalysis")]
    public partial class EmailAnalysis : IEquatable<EmailAnalysis>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailAnalysis" /> class.
        /// </summary>
        /// <param name="spamVerdict">Verdict of spam ranking analysis.</param>
        /// <param name="virusVerdict">Verdict of virus scan analysis.</param>
        /// <param name="spfVerdict">Verdict of Send Policy Framework record spoofing analysis.</param>
        /// <param name="dkimVerdict">Verdict of DomainKeys Identified Mail analysis.</param>
        /// <param name="dmarcVerdict">Verdict of Domain-based Message Authentication Reporting and Conformance analysis.</param>
        public EmailAnalysis(string spamVerdict = default(string), string virusVerdict = default(string), string spfVerdict = default(string), string dkimVerdict = default(string), string dmarcVerdict = default(string))
        {
            this.SpamVerdict = spamVerdict;
            this.VirusVerdict = virusVerdict;
            this.SpfVerdict = spfVerdict;
            this.DkimVerdict = dkimVerdict;
            this.DmarcVerdict = dmarcVerdict;
        }

        /// <summary>
        /// Verdict of spam ranking analysis
        /// </summary>
        /// <value>Verdict of spam ranking analysis</value>
        [DataMember(Name = "spamVerdict", EmitDefaultValue = true)]
        public string SpamVerdict { get; set; }

        /// <summary>
        /// Verdict of virus scan analysis
        /// </summary>
        /// <value>Verdict of virus scan analysis</value>
        [DataMember(Name = "virusVerdict", EmitDefaultValue = true)]
        public string VirusVerdict { get; set; }

        /// <summary>
        /// Verdict of Send Policy Framework record spoofing analysis
        /// </summary>
        /// <value>Verdict of Send Policy Framework record spoofing analysis</value>
        [DataMember(Name = "spfVerdict", EmitDefaultValue = true)]
        public string SpfVerdict { get; set; }

        /// <summary>
        /// Verdict of DomainKeys Identified Mail analysis
        /// </summary>
        /// <value>Verdict of DomainKeys Identified Mail analysis</value>
        [DataMember(Name = "dkimVerdict", EmitDefaultValue = true)]
        public string DkimVerdict { get; set; }

        /// <summary>
        /// Verdict of Domain-based Message Authentication Reporting and Conformance analysis
        /// </summary>
        /// <value>Verdict of Domain-based Message Authentication Reporting and Conformance analysis</value>
        [DataMember(Name = "dmarcVerdict", EmitDefaultValue = true)]
        public string DmarcVerdict { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class EmailAnalysis {\n");
            sb.Append("  SpamVerdict: ").Append(SpamVerdict).Append("\n");
            sb.Append("  VirusVerdict: ").Append(VirusVerdict).Append("\n");
            sb.Append("  SpfVerdict: ").Append(SpfVerdict).Append("\n");
            sb.Append("  DkimVerdict: ").Append(DkimVerdict).Append("\n");
            sb.Append("  DmarcVerdict: ").Append(DmarcVerdict).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as EmailAnalysis);
        }

        /// <summary>
        /// Returns true if EmailAnalysis instances are equal
        /// </summary>
        /// <param name="input">Instance of EmailAnalysis to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(EmailAnalysis input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SpamVerdict == input.SpamVerdict ||
                    (this.SpamVerdict != null &&
                    this.SpamVerdict.Equals(input.SpamVerdict))
                ) && 
                (
                    this.VirusVerdict == input.VirusVerdict ||
                    (this.VirusVerdict != null &&
                    this.VirusVerdict.Equals(input.VirusVerdict))
                ) && 
                (
                    this.SpfVerdict == input.SpfVerdict ||
                    (this.SpfVerdict != null &&
                    this.SpfVerdict.Equals(input.SpfVerdict))
                ) && 
                (
                    this.DkimVerdict == input.DkimVerdict ||
                    (this.DkimVerdict != null &&
                    this.DkimVerdict.Equals(input.DkimVerdict))
                ) && 
                (
                    this.DmarcVerdict == input.DmarcVerdict ||
                    (this.DmarcVerdict != null &&
                    this.DmarcVerdict.Equals(input.DmarcVerdict))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SpamVerdict != null)
                {
                    hashCode = (hashCode * 59) + this.SpamVerdict.GetHashCode();
                }
                if (this.VirusVerdict != null)
                {
                    hashCode = (hashCode * 59) + this.VirusVerdict.GetHashCode();
                }
                if (this.SpfVerdict != null)
                {
                    hashCode = (hashCode * 59) + this.SpfVerdict.GetHashCode();
                }
                if (this.DkimVerdict != null)
                {
                    hashCode = (hashCode * 59) + this.DkimVerdict.GetHashCode();
                }
                if (this.DmarcVerdict != null)
                {
                    hashCode = (hashCode * 59) + this.DmarcVerdict.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/Email.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email entity (also known as EmailDto). When an SMTP email message is received by MailSlurp it is parsed. The body and attachments are written to disk and the fields such as to, from, subject etc are stored in a database. The &#x60;body&#x60; contains the email content. If you want the original SMTP message see the &#x60;getRawEmail&#x60; endpoints. The attachments can be fetched using the AttachmentController
    /// </summary>
    [DataContract(Name = "Email")]
    public partial class Email : IEquatable<Email>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Email" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected Email() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="Email" /> class.
        /// </summary>
        /// <param name="id">ID of the email entity (required).</param>
        /// <param name="userId">ID of user that email belongs to (required).</param>
        /// <param name="inboxId">ID of the inbox that received the email (required).</param>
        /// <param name="domainId">ID of the domain that received the email.</param>
        /// <param name="to">List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names. (required).</param>
        /// <param name="from">Who the email was sent from. An email address - see fromName for the sender name..</param>
        /// <param name="sender">sender.</param>
        /// <param name="recipients">recipients.</param>
        /// <param name="replyTo">The &#x60;replyTo&#x60; field on the received email message.</param>
        /// <param name="cc">List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names..</param>
        /// <param name="bcc">List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names..</param>
        /// <param name="headers">Collection of SMTP headers attached to email.</param>
        /// <param name="headersMap">Multi-value map of SMTP headers attached to email.</param>
        /// <param name="attachments">List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension..</param>
        /// <param name="subject">The subject line of the email message as specified by SMTP subject header.</param>
        /// <param name="body">The body of the email message as text parsed from the SMTP message body (does not include attachments). Fetch the raw content to access the SMTP message and use the attachments property to access attachments. The body is stored separately to the email entity so the body is not returned in paginated results only in full single email or wait requests..</param>
        /// <param name="bodyExcerpt">An excerpt of the body of the email message for quick preview. Takes HTML content part if exists falls back to TEXT content part if not.</param>
        /// <param name="textExcerpt">An excerpt of the body of the email message for quick preview. Takes TEXT content part if exists.</param>
        /// <param name="bodyMD5Hash">A hash signature of the email message using MD5. Useful for comparing emails without fetching full body..</param>
        /// <param name="isHTML">Is the email body content type HTML?.</param>
        /// <param name="charset">Detected character set of the email body such as UTF-8.</param>
        /// <param name="analysis">analysis.</param>
        /// <param name="createdAt">When was the email received by MailSlurp (required).</param>
        /// <param name="updatedAt">When was the email last updated (required).</param>
        /// <param name="read">Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks. (required).</param>
        /// <param name="teamAccess">Can the email be accessed by organization team members (required).</param>
        /// <param name="isXAmpHtml">Is the email body content type x-amp-html Amp4Email?.</param>
        /// <param name="bodyPartContentTypes">A list of detected multipart mime message body part content types such as text/plain and text/html. Can be used with email bodyPart endpoints to fetch individual body parts..</param>
        /// <param name="html">html.</param>
        /// <param name="xampHtml">xampHtml.</param>
        public Email(Guid id = default(Guid), Guid userId = default(Guid), Guid inboxId = default(Guid), Guid? domainId = default(Guid?), List<string> to = default(List<string>), string from = default(string), Sender sender = default(Sender), EmailRecipients recipients = default(EmailRecipients), string replyTo = default(string), List<string> cc = default(List<string>), List<string> bcc = default(List<string>), Dictionary<string, string> headers = default(Dictionary<string, string>), Dictionary<string, List<string>> headersMap = default(Dictionary<string, List<string>>), List<string> attachments = default(List<string>), string subject = default(string), string body = default(string), string bodyExcerpt = default(string), string textExcerpt = default(string), string bodyMD5Hash = default(string), bool? isHTML = default(bool?), string charset = default(string), EmailAnalysis analysis = default(EmailAnalysis), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), bool read = default(bool), bool teamAccess = default(bool), bool? isXAmpHtml = default(bool?), List<string> bodyPartContentTypes = default(List<string>), bool html = default(bool), bool xampHtml = default(bool))
        {
            this.Id = id;
            this.UserId = userId;
            this.InboxId = inboxId;
            // to ensure "to" is required (not null)
            if (to == null)
            {
                throw new ArgumentNullException("to is a required property for Email and cannot be null");
            }
            this.To = to;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Read = read;
            this.TeamAccess = teamAccess;
            this.DomainId = domainId;
            this.From = from;
            this.Sender = sender;
            this.Recipients = recipients;
            this.ReplyTo = replyTo;
            this.Cc = cc;
            this.Bcc = bcc;
            this.Headers = headers;
            this.HeadersMap = headersMap;
            this.Attachments = attachments;
            this.Subject = subject;
            this.Body = body;
            this.BodyExcerpt = bodyExcerpt;
            this.TextExcerpt = textExcerpt;
            this.BodyMD5Hash = bodyMD5Hash;
            this.IsHTML = isHTML;
            this.Charset = charset;
            this.Analysis = analysis;
            this.IsXAmpHtml = isXAmpHtml;
            this.BodyPartContentTypes = bodyPartContentTypes;
            this.Html = html;
            this.XampHtml = xampHtml;
        }

        /// <summary>
        /// ID of the email entity
        /// </summary>
        /// <value>ID of the email entity</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// ID of user that email belongs to
        /// </summary>
        /// <value>ID of user that email belongs to</value>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// ID of the inbox that received the email
        /// </summary>
        /// <value>ID of the inbox that received the email</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// ID of the domain that received the email
        /// </summary>
        /// <value>ID of the domain that received the email</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;To&#x60; recipient email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "to", IsRequired = true, EmitDefaultValue = true)]
        public List<string> To { get; set; }

        /// <summary>
        /// Who the email was sent from. An email address - see fromName for the sender name.
        /// </summary>
        /// <value>Who the email was sent from. An email address - see fromName for the sender name.</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Gets or Sets Sender
        /// </summary>
        [DataMember(Name = "sender", EmitDefaultValue = true)]
        public Sender Sender { get; set; }

        /// <summary>
        /// Gets or Sets Recipients
        /// </summary>
        [DataMember(Name = "recipients", EmitDefaultValue = true)]
        public EmailRecipients Recipients { get; set; }

        /// <summary>
        /// The &#x60;replyTo&#x60; field on the received email message
        /// </summary>
        /// <value>The &#x60;replyTo&#x60; field on the received email message</value>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;CC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "cc", EmitDefaultValue = true)]
        public List<string> Cc { get; set; }

        /// <summary>
        /// List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.
        /// </summary>
        /// <value>List of &#x60;BCC&#x60; recipients email addresses that the email was addressed to. See recipients object for names.</value>
        [DataMember(Name = "bcc", EmitDefaultValue = true)]
        public List<string> Bcc { get; set; }

        /// <summary>
        /// Collection of SMTP headers attached to email
        /// </summary>
        /// <value>Collection of SMTP headers attached to email</value>
        [DataMember(Name = "headers", EmitDefaultValue = true)]
        [Obsolete]
        public Dictionary<string, string> Headers { get; set; }

        /// <summary>
        /// Multi-value map of SMTP headers attached to email
        /// </summary>
        /// <value>Multi-value map of SMTP headers attached to email</value>
        [DataMember(Name = "headersMap", EmitDefaultValue = true)]
        public Dictionary<string, List<string>> HeadersMap { get; set; }

        /// <summary>
        /// List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension.
        /// </summary>
        /// <value>List of IDs of attachments found in the email. Use these IDs with the Inbox and Email Controllers to download attachments and attachment meta data such as filesize, name, extension.</value>
        [DataMember(Name = "attachments", EmitDefaultValue = true)]
        public List<string> Attachments { get; set; }

        /// <summary>
        /// The subject line of the email message as specified by SMTP subject header
        /// </summary>
        /// <value>The subject line of the email message as specified by SMTP subject header</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// The body of the email message as text parsed from the SMTP message body (does not include attachments). Fetch the raw content to access the SMTP message and use the attachments property to access attachments. The body is stored separately to the email entity so the body is not returned in paginated results only in full single email or wait requests.
        /// </summary>
        /// <value>The body of the email message as text parsed from the SMTP message body (does not include attachments). Fetch the raw content to access the SMTP message and use the attachments property to access attachments. The body is stored separately to the email entity so the body is not returned in paginated results only in full single email or wait requests.</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// An excerpt of the body of the email message for quick preview. Takes HTML content part if exists falls back to TEXT content part if not
        /// </summary>
        /// <value>An excerpt of the body of the email message for quick preview. Takes HTML content part if exists falls back to TEXT content part if not</value>
        [DataMember(Name = "bodyExcerpt", EmitDefaultValue = true)]
        public string BodyExcerpt { get; set; }

        /// <summary>
        /// An excerpt of the body of the email message for quick preview. Takes TEXT content part if exists
        /// </summary>
        /// <value>An excerpt of the body of the email message for quick preview. Takes TEXT content part if exists</value>
        [DataMember(Name = "textExcerpt", EmitDefaultValue = true)]
        public string TextExcerpt { get; set; }

        /// <summary>
        /// A hash signature of the email message using MD5. Useful for comparing emails without fetching full body.
        /// </summary>
        /// <value>A hash signature of the email message using MD5. Useful for comparing emails without fetching full body.</value>
        [DataMember(Name = "bodyMD5Hash", EmitDefaultValue = true)]
        public string BodyMD5Hash { get; set; }

        /// <summary>
        /// Is the email body content type HTML?
        /// </summary>
        /// <value>Is the email body content type HTML?</value>
        [DataMember(Name = "isHTML", EmitDefaultValue = true)]
        public bool? IsHTML { get; set; }

        /// <summary>
        /// Detected character set of the email body such as UTF-8
        /// </summary>
        /// <value>Detected character set of the email body such as UTF-8</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Gets or Sets Analysis
        /// </summary>
        [DataMember(Name = "analysis", EmitDefaultValue = true)]
        public EmailAnalysis Analysis { get; set; }

        /// <summary>
        /// When was the email received by MailSlurp
        /// </summary>
        /// <value>When was the email received by MailSlurp</value>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// When was the email last updated
        /// </summary>
        /// <value>When was the email last updated</value>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks.
        /// </summary>
        /// <value>Read flag. Has the email ever been viewed in the dashboard or fetched via the API with a hydrated body? If so the email is marked as read. Paginated results do not affect read status. Read status is different to email opened event as it depends on your own account accessing the email. Email opened is determined by tracking pixels sent to other uses if enable during sending. You can listened for both email read and email opened events using webhooks.</value>
        [DataMember(Name = "read", IsRequired = true, EmitDefaultValue = true)]
        public bool Read { get; set; }

        /// <summary>
        /// Can the email be accessed by organization team members
        /// </summary>
        /// <value>Can the email be accessed by organization team members</value>
        [DataMember(Name = "teamAccess", IsRequired = true, EmitDefaultValue = true)]
        public bool TeamAccess { get; set; }

        /// <summary>
        /// Is the email body content type x-amp-html Amp4Email?
        /// </summary>
        /// <value>Is the email body content type x-amp-html Amp4Email?</value>
        [DataMember(Name = "isXAmpHtml", EmitDefaultValue = true)]
        public bool? IsXAmpHtml { get; set; }

        /// <summary>
        /// A list of detected multipart mime message body part content types such as text/plain and text/html. Can be used with email bodyPart endpoints to fetch individual body parts.
        /// </summary>
        /// <value>A list of detected multipart mime message body part content types such as text/plain and text/html. Can be used with email bodyPart endpoints to fetch individual body parts.</value>
        [DataMember(Name = "bodyPartContentTypes", EmitDefaultValue = true)]
        public List<string> BodyPartContentTypes { get; set; }

        /// <summary>
        /// Gets or Sets Html
        /// </summary>
        [DataMember(Name = "html", EmitDefaultValue = true)]
        public bool Html { get; set; }

        /// <summary>
        /// Gets or Sets XampHtml
        /// </summary>
        [DataMember(Name = "xampHtml", EmitDefaultValue = true)]
        public bool XampHtml { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class Email {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  To: ").Append(To).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  Cc: ").Append(Cc).Append("\n");
            sb.Append("  Bcc: ").Append(Bcc).Append("\n");
            sb.Append("  Headers: ").Append(Headers).Append("\n");
            sb.Append("  HeadersMap: ").Append(HeadersMap).Append("\n");
            sb.Append("  Attachments: ").Append(Attachments).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  BodyExcerpt: ").Append(BodyExcerpt).Append("\n");
            sb.Append("  TextExcerpt: ").Append(TextExcerpt).Append("\n");
            sb.Append("  BodyMD5Hash: ").Append(BodyMD5Hash).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  Analysis: ").Append(Analysis).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  Read: ").Append(Read).Append("\n");
            sb.Append("  TeamAccess: ").Append(TeamAccess).Append("\n");
            sb.Append("  IsXAmpHtml: ").Append(IsXAmpHtml).Append("\n");
            sb.Append("  BodyPartContentTypes: ").Append(BodyPartContentTypes).Append("\n");
            sb.Append("  Html: ").Append(Html).Append("\n");
            sb.Append("  XampHtml: ").Append(XampHtml).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as Email);
        }

        /// <summary>
        /// Returns true if Email instances are equal
        /// </summary>
        /// <param name="input">Instance of Email to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Email input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.To == input.To ||
                    this.To != null &&
                    input.To != null &&
                    this.To.SequenceEqual(input.To)
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    (this.Recipients != null &&
                    this.Recipients.Equals(input.Recipients))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.Cc == input.Cc ||
                    this.Cc != null &&
                    input.Cc != null &&
                    this.Cc.SequenceEqual(input.Cc)
                ) && 
                (
                    this.Bcc == input.Bcc ||
                    this.Bcc != null &&
                    input.Bcc != null &&
                    this.Bcc.SequenceEqual(input.Bcc)
                ) && 
                (
                    this.Headers == input.Headers ||
                    this.Headers != null &&
                    input.Headers != null &&
                    this.Headers.SequenceEqual(input.Headers)
                ) && 
                (
                    this.HeadersMap == input.HeadersMap ||
                    this.HeadersMap != null &&
                    input.HeadersMap != null &&
                    this.HeadersMap.SequenceEqual(input.HeadersMap)
                ) && 
                (
                    this.Attachments == input.Attachments ||
                    this.Attachments != null &&
                    input.Attachments != null &&
                    this.Attachments.SequenceEqual(input.Attachments)
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.BodyExcerpt == input.BodyExcerpt ||
                    (this.BodyExcerpt != null &&
                    this.BodyExcerpt.Equals(input.BodyExcerpt))
                ) && 
                (
                    this.TextExcerpt == input.TextExcerpt ||
                    (this.TextExcerpt != null &&
                    this.TextExcerpt.Equals(input.TextExcerpt))
                ) && 
                (
                    this.BodyMD5Hash == input.BodyMD5Hash ||
                    (this.BodyMD5Hash != null &&
                    this.BodyMD5Hash.Equals(input.BodyMD5Hash))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    (this.IsHTML != null &&
                    this.IsHTML.Equals(input.IsHTML))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.Analysis == input.Analysis ||
                    (this.Analysis != null &&
                    this.Analysis.Equals(input.Analysis))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.Read == input.Read ||
                    this.Read.Equals(input.Read)
                ) && 
                (
                    this.TeamAccess == input.TeamAccess ||
                    this.TeamAccess.Equals(input.TeamAccess)
                ) && 
                (
                    this.IsXAmpHtml == input.IsXAmpHtml ||
                    (this.IsXAmpHtml != null &&
                    this.IsXAmpHtml.Equals(input.IsXAmpHtml))
                ) && 
                (
                    this.BodyPartContentTypes == input.BodyPartContentTypes ||
                    this.BodyPartContentTypes != null &&
                    input.BodyPartContentTypes != null &&
                    this.BodyPartContentTypes.SequenceEqual(input.BodyPartContentTypes)
                ) && 
                (
                    this.Html == input.Html ||
                    this.Html.Equals(input.Html)
                ) && 
                (
                    this.XampHtml == input.XampHtml ||
                    this.XampHtml.Equals(input.XampHtml)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.To != null)
                {
                    hashCode = (hashCode * 59) + this.To.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.Cc != null)
                {
                    hashCode = (hashCode * 59) + this.Cc.GetHashCode();
                }
                if (this.Bcc != null)
                {
                    hashCode = (hashCode * 59) + this.Bcc.GetHashCode();
                }
                if (this.Headers != null)
                {
                    hashCode = (hashCode * 59) + this.Headers.GetHashCode();
                }
                if (this.HeadersMap != null)
                {
                    hashCode = (hashCode * 59) + this.HeadersMap.GetHashCode();
                }
                if (this.Attachments != null)
                {
                    hashCode = (hashCode * 59) + this.Attachments.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.BodyExcerpt != null)
                {
                    hashCode = (hashCode * 59) + this.BodyExcerpt.GetHashCode();
                }
                if (this.TextExcerpt != null)
                {
                    hashCode = (hashCode * 59) + this.TextExcerpt.GetHashCode();
                }
                if (this.BodyMD5Hash != null)
                {
                    hashCode = (hashCode * 59) + this.BodyMD5Hash.GetHashCode();
                }
                if (this.IsHTML != null)
                {
                    hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.Analysis != null)
                {
                    hashCode = (hashCode * 59) + this.Analysis.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Read.GetHashCode();
                hashCode = (hashCode * 59) + this.TeamAccess.GetHashCode();
                if (this.IsXAmpHtml != null)
                {
                    hashCode = (hashCode * 59) + this.IsXAmpHtml.GetHashCode();
                }
                if (this.BodyPartContentTypes != null)
                {
                    hashCode = (hashCode * 59) + this.BodyPartContentTypes.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Html.GetHashCode();
                hashCode = (hashCode * 59) + this.XampHtml.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DownloadAttachmentDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Content of attachment
    /// </summary>
    [DataContract(Name = "DownloadAttachmentDto")]
    public partial class DownloadAttachmentDto : IEquatable<DownloadAttachmentDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DownloadAttachmentDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DownloadAttachmentDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DownloadAttachmentDto" /> class.
        /// </summary>
        /// <param name="base64FileContents">Base64 encoded string of attachment bytes. Decode the base64 encoded string to get the raw contents. If the file has a content type such as &#x60;text/html&#x60; you can read the contents directly by converting it to string using &#x60;utf-8&#x60; encoding. (required).</param>
        /// <param name="contentType">Content type of attachment. Examples are &#x60;image/png&#x60;, &#x60;application/msword&#x60;, &#x60;text/csv&#x60; etc. (required).</param>
        /// <param name="sizeBytes">Size in bytes of attachment content (required).</param>
        public DownloadAttachmentDto(string base64FileContents = default(string), string contentType = default(string), long sizeBytes = default(long))
        {
            // to ensure "base64FileContents" is required (not null)
            if (base64FileContents == null)
            {
                throw new ArgumentNullException("base64FileContents is a required property for DownloadAttachmentDto and cannot be null");
            }
            this.Base64FileContents = base64FileContents;
            // to ensure "contentType" is required (not null)
            if (contentType == null)
            {
                throw new ArgumentNullException("contentType is a required property for DownloadAttachmentDto and cannot be null");
            }
            this.ContentType = contentType;
            this.SizeBytes = sizeBytes;
        }

        /// <summary>
        /// Base64 encoded string of attachment bytes. Decode the base64 encoded string to get the raw contents. If the file has a content type such as &#x60;text/html&#x60; you can read the contents directly by converting it to string using &#x60;utf-8&#x60; encoding.
        /// </summary>
        /// <value>Base64 encoded string of attachment bytes. Decode the base64 encoded string to get the raw contents. If the file has a content type such as &#x60;text/html&#x60; you can read the contents directly by converting it to string using &#x60;utf-8&#x60; encoding.</value>
        [DataMember(Name = "base64FileContents", IsRequired = true, EmitDefaultValue = true)]
        public string Base64FileContents { get; set; }

        /// <summary>
        /// Content type of attachment. Examples are &#x60;image/png&#x60;, &#x60;application/msword&#x60;, &#x60;text/csv&#x60; etc.
        /// </summary>
        /// <value>Content type of attachment. Examples are &#x60;image/png&#x60;, &#x60;application/msword&#x60;, &#x60;text/csv&#x60; etc.</value>
        [DataMember(Name = "contentType", IsRequired = true, EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Size in bytes of attachment content
        /// </summary>
        /// <value>Size in bytes of attachment content</value>
        [DataMember(Name = "sizeBytes", IsRequired = true, EmitDefaultValue = true)]
        public long SizeBytes { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DownloadAttachmentDto {\n");
            sb.Append("  Base64FileContents: ").Append(Base64FileContents).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  SizeBytes: ").Append(SizeBytes).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DownloadAttachmentDto);
        }

        /// <summary>
        /// Returns true if DownloadAttachmentDto instances are equal
        /// </summary>
        /// <param name="input">Instance of DownloadAttachmentDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DownloadAttachmentDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Base64FileContents == input.Base64FileContents ||
                    (this.Base64FileContents != null &&
                    this.Base64FileContents.Equals(input.Base64FileContents))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.SizeBytes == input.SizeBytes ||
                    this.SizeBytes.Equals(input.SizeBytes)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Base64FileContents != null)
                {
                    hashCode = (hashCode * 59) + this.Base64FileContents.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SizeBytes.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainPreview.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Preview object for domain entity
    /// </summary>
    [DataContract(Name = "DomainPreview")]
    public partial class DomainPreview : IEquatable<DomainPreview>, IValidatableObject
    {
        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DomainTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPDOMAIN for value: SMTP_DOMAIN
            /// </summary>
            [EnumMember(Value = "SMTP_DOMAIN")]
            SMTPDOMAIN = 2

        }


        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [DataMember(Name = "domainType", IsRequired = true, EmitDefaultValue = true)]
        public DomainTypeEnum DomainType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainPreview" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainPreview() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainPreview" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="domain">domain (required).</param>
        /// <param name="catchAllInboxId">catchAllInboxId.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="domainType">Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails. (required).</param>
        /// <param name="isVerified">isVerified (required).</param>
        /// <param name="hasMissingRecords">hasMissingRecords (required).</param>
        public DomainPreview(Guid id = default(Guid), string domain = default(string), Guid? catchAllInboxId = default(Guid?), DateTime createdAt = default(DateTime), DomainTypeEnum domainType = default(DomainTypeEnum), bool isVerified = default(bool), bool hasMissingRecords = default(bool))
        {
            this.Id = id;
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for DomainPreview and cannot be null");
            }
            this.Domain = domain;
            this.CreatedAt = createdAt;
            this.DomainType = domainType;
            this.IsVerified = isVerified;
            this.HasMissingRecords = hasMissingRecords;
            this.CatchAllInboxId = catchAllInboxId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Gets or Sets CatchAllInboxId
        /// </summary>
        [DataMember(Name = "catchAllInboxId", EmitDefaultValue = true)]
        public Guid? CatchAllInboxId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets IsVerified
        /// </summary>
        [DataMember(Name = "isVerified", IsRequired = true, EmitDefaultValue = true)]
        public bool IsVerified { get; set; }

        /// <summary>
        /// Gets or Sets HasMissingRecords
        /// </summary>
        [DataMember(Name = "hasMissingRecords", IsRequired = true, EmitDefaultValue = true)]
        public bool HasMissingRecords { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainPreview {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  CatchAllInboxId: ").Append(CatchAllInboxId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  DomainType: ").Append(DomainType).Append("\n");
            sb.Append("  IsVerified: ").Append(IsVerified).Append("\n");
            sb.Append("  HasMissingRecords: ").Append(HasMissingRecords).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainPreview);
        }

        /// <summary>
        /// Returns true if DomainPreview instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainPreview to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainPreview input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this.CatchAllInboxId == input.CatchAllInboxId ||
                    (this.CatchAllInboxId != null &&
                    this.CatchAllInboxId.Equals(input.CatchAllInboxId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.DomainType == input.DomainType ||
                    this.DomainType.Equals(input.DomainType)
                ) && 
                (
                    this.IsVerified == input.IsVerified ||
                    this.IsVerified.Equals(input.IsVerified)
                ) && 
                (
                    this.HasMissingRecords == input.HasMissingRecords ||
                    this.HasMissingRecords.Equals(input.HasMissingRecords)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                if (this.CatchAllInboxId != null)
                {
                    hashCode = (hashCode * 59) + this.CatchAllInboxId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.DomainType.GetHashCode();
                hashCode = (hashCode * 59) + this.IsVerified.GetHashCode();
                hashCode = (hashCode * 59) + this.HasMissingRecords.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainNameRecord.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DNS Record required for verification of a domain. Record vary depending on domain type.
    /// </summary>
    [DataContract(Name = "DomainNameRecord")]
    public partial class DomainNameRecord : IEquatable<DomainNameRecord>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Label
        /// </summary>
        /// <value>Domain Name Server Record Label</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum LabelEnum
        {
            /// <summary>
            /// Enum VERIFICATION for value: VERIFICATION
            /// </summary>
            [EnumMember(Value = "VERIFICATION")]
            VERIFICATION = 1,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 2,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 3,

            /// <summary>
            /// Enum DKIM for value: DKIM
            /// </summary>
            [EnumMember(Value = "DKIM")]
            DKIM = 4,

            /// <summary>
            /// Enum DMARC for value: DMARC
            /// </summary>
            [EnumMember(Value = "DMARC")]
            DMARC = 5

        }


        /// <summary>
        /// Domain Name Server Record Label
        /// </summary>
        /// <value>Domain Name Server Record Label</value>
        [DataMember(Name = "label", IsRequired = true, EmitDefaultValue = true)]
        public LabelEnum Label { get; set; }
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RecordTypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "recordType", IsRequired = true, EmitDefaultValue = true)]
        public RecordTypeEnum RecordType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainNameRecord" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainNameRecord() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainNameRecord" /> class.
        /// </summary>
        /// <param name="label">Domain Name Server Record Label (required).</param>
        /// <param name="required">required (required).</param>
        /// <param name="recordType">Domain Name Server Record Types (required).</param>
        /// <param name="name">name (required).</param>
        /// <param name="recordEntries">recordEntries (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="alternativeRecordEntries">alternativeRecordEntries.</param>
        public DomainNameRecord(LabelEnum label = default(LabelEnum), bool required = default(bool), RecordTypeEnum recordType = default(RecordTypeEnum), string name = default(string), List<string> recordEntries = default(List<string>), long ttl = default(long), List<string> alternativeRecordEntries = default(List<string>))
        {
            this.Label = label;
            this.Required = required;
            this.RecordType = recordType;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for DomainNameRecord and cannot be null");
            }
            this.Name = name;
            // to ensure "recordEntries" is required (not null)
            if (recordEntries == null)
            {
                throw new ArgumentNullException("recordEntries is a required property for DomainNameRecord and cannot be null");
            }
            this.RecordEntries = recordEntries;
            this.Ttl = ttl;
            this.AlternativeRecordEntries = alternativeRecordEntries;
        }

        /// <summary>
        /// Gets or Sets Required
        /// </summary>
        [DataMember(Name = "required", IsRequired = true, EmitDefaultValue = true)]
        public bool Required { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets RecordEntries
        /// </summary>
        [DataMember(Name = "recordEntries", IsRequired = true, EmitDefaultValue = true)]
        public List<string> RecordEntries { get; set; }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public long Ttl { get; set; }

        /// <summary>
        /// Gets or Sets AlternativeRecordEntries
        /// </summary>
        [DataMember(Name = "alternativeRecordEntries", EmitDefaultValue = true)]
        public List<string> AlternativeRecordEntries { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainNameRecord {\n");
            sb.Append("  Label: ").Append(Label).Append("\n");
            sb.Append("  Required: ").Append(Required).Append("\n");
            sb.Append("  RecordType: ").Append(RecordType).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  RecordEntries: ").Append(RecordEntries).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  AlternativeRecordEntries: ").Append(AlternativeRecordEntries).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainNameRecord);
        }

        /// <summary>
        /// Returns true if DomainNameRecord instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainNameRecord to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainNameRecord input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Label == input.Label ||
                    this.Label.Equals(input.Label)
                ) && 
                (
                    this.Required == input.Required ||
                    this.Required.Equals(input.Required)
                ) && 
                (
                    this.RecordType == input.RecordType ||
                    this.RecordType.Equals(input.RecordType)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.RecordEntries == input.RecordEntries ||
                    this.RecordEntries != null &&
                    input.RecordEntries != null &&
                    this.RecordEntries.SequenceEqual(input.RecordEntries)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.AlternativeRecordEntries == input.AlternativeRecordEntries ||
                    this.AlternativeRecordEntries != null &&
                    input.AlternativeRecordEntries != null &&
                    this.AlternativeRecordEntries.SequenceEqual(input.AlternativeRecordEntries)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Label.GetHashCode();
                hashCode = (hashCode * 59) + this.Required.GetHashCode();
                hashCode = (hashCode * 59) + this.RecordType.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.RecordEntries != null)
                {
                    hashCode = (hashCode * 59) + this.RecordEntries.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.AlternativeRecordEntries != null)
                {
                    hashCode = (hashCode * 59) + this.AlternativeRecordEntries.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainIssuesDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DomainIssuesDto
    /// </summary>
    [DataContract(Name = "DomainIssuesDto")]
    public partial class DomainIssuesDto : IEquatable<DomainIssuesDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainIssuesDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainIssuesDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainIssuesDto" /> class.
        /// </summary>
        /// <param name="hasIssues">hasIssues (required).</param>
        public DomainIssuesDto(bool hasIssues = default(bool))
        {
            this.HasIssues = hasIssues;
        }

        /// <summary>
        /// Gets or Sets HasIssues
        /// </summary>
        [DataMember(Name = "hasIssues", IsRequired = true, EmitDefaultValue = true)]
        public bool HasIssues { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainIssuesDto {\n");
            sb.Append("  HasIssues: ").Append(HasIssues).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainIssuesDto);
        }

        /// <summary>
        /// Returns true if DomainIssuesDto instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainIssuesDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainIssuesDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.HasIssues == input.HasIssues ||
                    this.HasIssues.Equals(input.HasIssues)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.HasIssues.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainInformation.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DomainInformation
    /// </summary>
    [DataContract(Name = "DomainInformation")]
    public partial class DomainInformation : IEquatable<DomainInformation>, IValidatableObject
    {
        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DomainTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPDOMAIN for value: SMTP_DOMAIN
            /// </summary>
            [EnumMember(Value = "SMTP_DOMAIN")]
            SMTPDOMAIN = 2

        }


        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [DataMember(Name = "domainType", IsRequired = true, EmitDefaultValue = true)]
        public DomainTypeEnum DomainType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainInformation" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainInformation() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainInformation" /> class.
        /// </summary>
        /// <param name="domainName">domainName (required).</param>
        /// <param name="verified">verified (required).</param>
        /// <param name="domainType">Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails. (required).</param>
        public DomainInformation(string domainName = default(string), bool verified = default(bool), DomainTypeEnum domainType = default(DomainTypeEnum))
        {
            // to ensure "domainName" is required (not null)
            if (domainName == null)
            {
                throw new ArgumentNullException("domainName is a required property for DomainInformation and cannot be null");
            }
            this.DomainName = domainName;
            this.Verified = verified;
            this.DomainType = domainType;
        }

        /// <summary>
        /// Gets or Sets DomainName
        /// </summary>
        [DataMember(Name = "domainName", IsRequired = true, EmitDefaultValue = true)]
        public string DomainName { get; set; }

        /// <summary>
        /// Gets or Sets Verified
        /// </summary>
        [DataMember(Name = "verified", IsRequired = true, EmitDefaultValue = true)]
        public bool Verified { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainInformation {\n");
            sb.Append("  DomainName: ").Append(DomainName).Append("\n");
            sb.Append("  Verified: ").Append(Verified).Append("\n");
            sb.Append("  DomainType: ").Append(DomainType).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainInformation);
        }

        /// <summary>
        /// Returns true if DomainInformation instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainInformation to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainInformation input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.DomainName == input.DomainName ||
                    (this.DomainName != null &&
                    this.DomainName.Equals(input.DomainName))
                ) && 
                (
                    this.Verified == input.Verified ||
                    this.Verified.Equals(input.Verified)
                ) && 
                (
                    this.DomainType == input.DomainType ||
                    this.DomainType.Equals(input.DomainType)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.DomainName != null)
                {
                    hashCode = (hashCode * 59) + this.DomainName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Verified.GetHashCode();
                hashCode = (hashCode * 59) + this.DomainType.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainGroupsDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DomainGroupsDto
    /// </summary>
    [DataContract(Name = "DomainGroupsDto")]
    public partial class DomainGroupsDto : IEquatable<DomainGroupsDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainGroupsDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainGroupsDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainGroupsDto" /> class.
        /// </summary>
        /// <param name="domainGroups">domainGroups (required).</param>
        public DomainGroupsDto(List<DomainGroup> domainGroups = default(List<DomainGroup>))
        {
            // to ensure "domainGroups" is required (not null)
            if (domainGroups == null)
            {
                throw new ArgumentNullException("domainGroups is a required property for DomainGroupsDto and cannot be null");
            }
            this.DomainGroups = domainGroups;
        }

        /// <summary>
        /// Gets or Sets DomainGroups
        /// </summary>
        [DataMember(Name = "domainGroups", IsRequired = true, EmitDefaultValue = true)]
        public List<DomainGroup> DomainGroups { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainGroupsDto {\n");
            sb.Append("  DomainGroups: ").Append(DomainGroups).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainGroupsDto);
        }

        /// <summary>
        /// Returns true if DomainGroupsDto instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainGroupsDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainGroupsDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.DomainGroups == input.DomainGroups ||
                    this.DomainGroups != null &&
                    input.DomainGroups != null &&
                    this.DomainGroups.SequenceEqual(input.DomainGroups)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.DomainGroups != null)
                {
                    hashCode = (hashCode * 59) + this.DomainGroups.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainGroup.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DomainGroup
    /// </summary>
    [DataContract(Name = "DomainGroup")]
    public partial class DomainGroup : IEquatable<DomainGroup>, IValidatableObject
    {
        /// <summary>
        /// Defines Label
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum LabelEnum
        {
            /// <summary>
            /// Enum DEFAULT for value: DEFAULT
            /// </summary>
            [EnumMember(Value = "DEFAULT")]
            DEFAULT = 1,

            /// <summary>
            /// Enum DOMAINPOOL for value: DOMAIN_POOL
            /// </summary>
            [EnumMember(Value = "DOMAIN_POOL")]
            DOMAINPOOL = 2,

            /// <summary>
            /// Enum CUSTOM for value: CUSTOM
            /// </summary>
            [EnumMember(Value = "CUSTOM")]
            CUSTOM = 3

        }


        /// <summary>
        /// Gets or Sets Label
        /// </summary>
        [DataMember(Name = "label", IsRequired = true, EmitDefaultValue = true)]
        public LabelEnum Label { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainGroup" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainGroup() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainGroup" /> class.
        /// </summary>
        /// <param name="label">label (required).</param>
        /// <param name="domains">domains (required).</param>
        public DomainGroup(LabelEnum label = default(LabelEnum), List<DomainInformation> domains = default(List<DomainInformation>))
        {
            this.Label = label;
            // to ensure "domains" is required (not null)
            if (domains == null)
            {
                throw new ArgumentNullException("domains is a required property for DomainGroup and cannot be null");
            }
            this.Domains = domains;
        }

        /// <summary>
        /// Gets or Sets Domains
        /// </summary>
        [DataMember(Name = "domains", IsRequired = true, EmitDefaultValue = true)]
        public List<DomainInformation> Domains { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainGroup {\n");
            sb.Append("  Label: ").Append(Label).Append("\n");
            sb.Append("  Domains: ").Append(Domains).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainGroup);
        }

        /// <summary>
        /// Returns true if DomainGroup instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainGroup to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainGroup input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Label == input.Label ||
                    this.Label.Equals(input.Label)
                ) && 
                (
                    this.Domains == input.Domains ||
                    this.Domains != null &&
                    input.Domains != null &&
                    this.Domains.SequenceEqual(input.Domains)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Label.GetHashCode();
                if (this.Domains != null)
                {
                    hashCode = (hashCode * 59) + this.Domains.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DomainDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Domain plus verification records and status
    /// </summary>
    [DataContract(Name = "DomainDto")]
    public partial class DomainDto : IEquatable<DomainDto>, IValidatableObject
    {
        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DomainTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPDOMAIN for value: SMTP_DOMAIN
            /// </summary>
            [EnumMember(Value = "SMTP_DOMAIN")]
            SMTPDOMAIN = 2

        }


        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [DataMember(Name = "domainType", IsRequired = true, EmitDefaultValue = true)]
        public DomainTypeEnum DomainType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DomainDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="domain">Custom domain name (required).</param>
        /// <param name="verificationToken">Verification tokens (required).</param>
        /// <param name="dkimTokens">Unique token DKIM tokens (required).</param>
        /// <param name="missingRecordsMessage">If the domain is missing records then show which pairs are missing..</param>
        /// <param name="hasMissingRecords">Whether the domain has missing required records. If true then see the domain in the dashboard app. (required).</param>
        /// <param name="isVerified">Whether domain has been verified or not. If the domain is not verified after 72 hours there is most likely an issue with the domains DNS records. (required).</param>
        /// <param name="domainNameRecords">List of DNS domain name records (C, MX, TXT) etc that you must add to the DNS server associated with your domain provider. (required).</param>
        /// <param name="catchAllInboxId">The optional catch all inbox that will receive emails sent to the domain that cannot be matched..</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="domainType">Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails. (required).</param>
        public DomainDto(Guid id = default(Guid), Guid userId = default(Guid), string domain = default(string), string verificationToken = default(string), List<string> dkimTokens = default(List<string>), string missingRecordsMessage = default(string), bool hasMissingRecords = default(bool), bool isVerified = default(bool), List<DomainNameRecord> domainNameRecords = default(List<DomainNameRecord>), Guid? catchAllInboxId = default(Guid?), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), DomainTypeEnum domainType = default(DomainTypeEnum))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for DomainDto and cannot be null");
            }
            this.Domain = domain;
            // to ensure "verificationToken" is required (not null)
            if (verificationToken == null)
            {
                throw new ArgumentNullException("verificationToken is a required property for DomainDto and cannot be null");
            }
            this.VerificationToken = verificationToken;
            // to ensure "dkimTokens" is required (not null)
            if (dkimTokens == null)
            {
                throw new ArgumentNullException("dkimTokens is a required property for DomainDto and cannot be null");
            }
            this.DkimTokens = dkimTokens;
            this.HasMissingRecords = hasMissingRecords;
            this.IsVerified = isVerified;
            // to ensure "domainNameRecords" is required (not null)
            if (domainNameRecords == null)
            {
                throw new ArgumentNullException("domainNameRecords is a required property for DomainDto and cannot be null");
            }
            this.DomainNameRecords = domainNameRecords;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.DomainType = domainType;
            this.MissingRecordsMessage = missingRecordsMessage;
            this.CatchAllInboxId = catchAllInboxId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Custom domain name
        /// </summary>
        /// <value>Custom domain name</value>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Verification tokens
        /// </summary>
        /// <value>Verification tokens</value>
        [DataMember(Name = "verificationToken", IsRequired = true, EmitDefaultValue = true)]
        public string VerificationToken { get; set; }

        /// <summary>
        /// Unique token DKIM tokens
        /// </summary>
        /// <value>Unique token DKIM tokens</value>
        [DataMember(Name = "dkimTokens", IsRequired = true, EmitDefaultValue = true)]
        public List<string> DkimTokens { get; set; }

        /// <summary>
        /// If the domain is missing records then show which pairs are missing.
        /// </summary>
        /// <value>If the domain is missing records then show which pairs are missing.</value>
        [DataMember(Name = "missingRecordsMessage", EmitDefaultValue = true)]
        public string MissingRecordsMessage { get; set; }

        /// <summary>
        /// Whether the domain has missing required records. If true then see the domain in the dashboard app.
        /// </summary>
        /// <value>Whether the domain has missing required records. If true then see the domain in the dashboard app.</value>
        [DataMember(Name = "hasMissingRecords", IsRequired = true, EmitDefaultValue = true)]
        public bool HasMissingRecords { get; set; }

        /// <summary>
        /// Whether domain has been verified or not. If the domain is not verified after 72 hours there is most likely an issue with the domains DNS records.
        /// </summary>
        /// <value>Whether domain has been verified or not. If the domain is not verified after 72 hours there is most likely an issue with the domains DNS records.</value>
        [DataMember(Name = "isVerified", IsRequired = true, EmitDefaultValue = true)]
        public bool IsVerified { get; set; }

        /// <summary>
        /// List of DNS domain name records (C, MX, TXT) etc that you must add to the DNS server associated with your domain provider.
        /// </summary>
        /// <value>List of DNS domain name records (C, MX, TXT) etc that you must add to the DNS server associated with your domain provider.</value>
        [DataMember(Name = "domainNameRecords", IsRequired = true, EmitDefaultValue = true)]
        public List<DomainNameRecord> DomainNameRecords { get; set; }

        /// <summary>
        /// The optional catch all inbox that will receive emails sent to the domain that cannot be matched.
        /// </summary>
        /// <value>The optional catch all inbox that will receive emails sent to the domain that cannot be matched.</value>
        [DataMember(Name = "catchAllInboxId", EmitDefaultValue = true)]
        public Guid? CatchAllInboxId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DomainDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  VerificationToken: ").Append(VerificationToken).Append("\n");
            sb.Append("  DkimTokens: ").Append(DkimTokens).Append("\n");
            sb.Append("  MissingRecordsMessage: ").Append(MissingRecordsMessage).Append("\n");
            sb.Append("  HasMissingRecords: ").Append(HasMissingRecords).Append("\n");
            sb.Append("  IsVerified: ").Append(IsVerified).Append("\n");
            sb.Append("  DomainNameRecords: ").Append(DomainNameRecords).Append("\n");
            sb.Append("  CatchAllInboxId: ").Append(CatchAllInboxId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  DomainType: ").Append(DomainType).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DomainDto);
        }

        /// <summary>
        /// Returns true if DomainDto instances are equal
        /// </summary>
        /// <param name="input">Instance of DomainDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DomainDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this.VerificationToken == input.VerificationToken ||
                    (this.VerificationToken != null &&
                    this.VerificationToken.Equals(input.VerificationToken))
                ) && 
                (
                    this.DkimTokens == input.DkimTokens ||
                    this.DkimTokens != null &&
                    input.DkimTokens != null &&
                    this.DkimTokens.SequenceEqual(input.DkimTokens)
                ) && 
                (
                    this.MissingRecordsMessage == input.MissingRecordsMessage ||
                    (this.MissingRecordsMessage != null &&
                    this.MissingRecordsMessage.Equals(input.MissingRecordsMessage))
                ) && 
                (
                    this.HasMissingRecords == input.HasMissingRecords ||
                    this.HasMissingRecords.Equals(input.HasMissingRecords)
                ) && 
                (
                    this.IsVerified == input.IsVerified ||
                    this.IsVerified.Equals(input.IsVerified)
                ) && 
                (
                    this.DomainNameRecords == input.DomainNameRecords ||
                    this.DomainNameRecords != null &&
                    input.DomainNameRecords != null &&
                    this.DomainNameRecords.SequenceEqual(input.DomainNameRecords)
                ) && 
                (
                    this.CatchAllInboxId == input.CatchAllInboxId ||
                    (this.CatchAllInboxId != null &&
                    this.CatchAllInboxId.Equals(input.CatchAllInboxId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.DomainType == input.DomainType ||
                    this.DomainType.Equals(input.DomainType)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                if (this.VerificationToken != null)
                {
                    hashCode = (hashCode * 59) + this.VerificationToken.GetHashCode();
                }
                if (this.DkimTokens != null)
                {
                    hashCode = (hashCode * 59) + this.DkimTokens.GetHashCode();
                }
                if (this.MissingRecordsMessage != null)
                {
                    hashCode = (hashCode * 59) + this.MissingRecordsMessage.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.HasMissingRecords.GetHashCode();
                hashCode = (hashCode * 59) + this.IsVerified.GetHashCode();
                if (this.DomainNameRecords != null)
                {
                    hashCode = (hashCode * 59) + this.DomainNameRecords.GetHashCode();
                }
                if (this.CatchAllInboxId != null)
                {
                    hashCode = (hashCode * 59) + this.CatchAllInboxId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.DomainType.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DescribeMailServerDomainResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Name Server lookup result
    /// </summary>
    [DataContract(Name = "DescribeMailServerDomainResult")]
    public partial class DescribeMailServerDomainResult : IEquatable<DescribeMailServerDomainResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DescribeMailServerDomainResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DescribeMailServerDomainResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DescribeMailServerDomainResult" /> class.
        /// </summary>
        /// <param name="mxRecords">mxRecords (required).</param>
        /// <param name="domain">domain (required).</param>
        /// <param name="message">message.</param>
        public DescribeMailServerDomainResult(List<NameServerRecord> mxRecords = default(List<NameServerRecord>), string domain = default(string), string message = default(string))
        {
            // to ensure "mxRecords" is required (not null)
            if (mxRecords == null)
            {
                throw new ArgumentNullException("mxRecords is a required property for DescribeMailServerDomainResult and cannot be null");
            }
            this.MxRecords = mxRecords;
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for DescribeMailServerDomainResult and cannot be null");
            }
            this.Domain = domain;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets MxRecords
        /// </summary>
        [DataMember(Name = "mxRecords", IsRequired = true, EmitDefaultValue = true)]
        public List<NameServerRecord> MxRecords { get; set; }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = true)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DescribeMailServerDomainResult {\n");
            sb.Append("  MxRecords: ").Append(MxRecords).Append("\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DescribeMailServerDomainResult);
        }

        /// <summary>
        /// Returns true if DescribeMailServerDomainResult instances are equal
        /// </summary>
        /// <param name="input">Instance of DescribeMailServerDomainResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DescribeMailServerDomainResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.MxRecords == input.MxRecords ||
                    this.MxRecords != null &&
                    input.MxRecords != null &&
                    this.MxRecords.SequenceEqual(input.MxRecords)
                ) && 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.MxRecords != null)
                {
                    hashCode = (hashCode * 59) + this.MxRecords.GetHashCode();
                }
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DescribeDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Domain record description
    /// </summary>
    [DataContract(Name = "DescribeDomainOptions")]
    public partial class DescribeDomainOptions : IEquatable<DescribeDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DescribeDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DescribeDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DescribeDomainOptions" /> class.
        /// </summary>
        /// <param name="domain">domain (required).</param>
        public DescribeDomainOptions(string domain = default(string))
        {
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for DescribeDomainOptions and cannot be null");
            }
            this.Domain = domain;
        }

        /// <summary>
        /// Gets or Sets Domain
        /// </summary>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DescribeDomainOptions {\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DescribeDomainOptions);
        }

        /// <summary>
        /// Returns true if DescribeDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of DescribeDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DescribeDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DeliveryStatusDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DeliveryStatusDto
    /// </summary>
    [DataContract(Name = "DeliveryStatusDto")]
    public partial class DeliveryStatusDto : IEquatable<DeliveryStatusDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DeliveryStatusDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DeliveryStatusDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DeliveryStatusDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="sentId">sentId.</param>
        /// <param name="remoteMtaIp">remoteMtaIp.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="reportingMta">reportingMta.</param>
        /// <param name="recipients">recipients.</param>
        /// <param name="smtpResponse">smtpResponse.</param>
        /// <param name="smtpStatusCode">smtpStatusCode.</param>
        /// <param name="processingTimeMillis">processingTimeMillis.</param>
        /// <param name="received">received.</param>
        /// <param name="subject">subject.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public DeliveryStatusDto(Guid id = default(Guid), Guid userId = default(Guid), Guid sentId = default(Guid), string remoteMtaIp = default(string), Guid inboxId = default(Guid), string reportingMta = default(string), List<string> recipients = default(List<string>), string smtpResponse = default(string), int smtpStatusCode = default(int), long processingTimeMillis = default(long), DateTime received = default(DateTime), string subject = default(string), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.SentId = sentId;
            this.RemoteMtaIp = remoteMtaIp;
            this.InboxId = inboxId;
            this.ReportingMta = reportingMta;
            this.Recipients = recipients;
            this.SmtpResponse = smtpResponse;
            this.SmtpStatusCode = smtpStatusCode;
            this.ProcessingTimeMillis = processingTimeMillis;
            this.Received = received;
            this.Subject = subject;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets SentId
        /// </summary>
        [DataMember(Name = "sentId", EmitDefaultValue = false)]
        public Guid SentId { get; set; }

        /// <summary>
        /// Gets or Sets RemoteMtaIp
        /// </summary>
        [DataMember(Name = "remoteMtaIp", EmitDefaultValue = false)]
        public string RemoteMtaIp { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = false)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets ReportingMta
        /// </summary>
        [DataMember(Name = "reportingMta", EmitDefaultValue = false)]
        public string ReportingMta { get; set; }

        /// <summary>
        /// Gets or Sets Recipients
        /// </summary>
        [DataMember(Name = "recipients", EmitDefaultValue = false)]
        public List<string> Recipients { get; set; }

        /// <summary>
        /// Gets or Sets SmtpResponse
        /// </summary>
        [DataMember(Name = "smtpResponse", EmitDefaultValue = false)]
        public string SmtpResponse { get; set; }

        /// <summary>
        /// Gets or Sets SmtpStatusCode
        /// </summary>
        [DataMember(Name = "smtpStatusCode", EmitDefaultValue = false)]
        public int SmtpStatusCode { get; set; }

        /// <summary>
        /// Gets or Sets ProcessingTimeMillis
        /// </summary>
        [DataMember(Name = "processingTimeMillis", EmitDefaultValue = false)]
        public long ProcessingTimeMillis { get; set; }

        /// <summary>
        /// Gets or Sets Received
        /// </summary>
        [DataMember(Name = "received", EmitDefaultValue = false)]
        public DateTime Received { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DeliveryStatusDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SentId: ").Append(SentId).Append("\n");
            sb.Append("  RemoteMtaIp: ").Append(RemoteMtaIp).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  ReportingMta: ").Append(ReportingMta).Append("\n");
            sb.Append("  Recipients: ").Append(Recipients).Append("\n");
            sb.Append("  SmtpResponse: ").Append(SmtpResponse).Append("\n");
            sb.Append("  SmtpStatusCode: ").Append(SmtpStatusCode).Append("\n");
            sb.Append("  ProcessingTimeMillis: ").Append(ProcessingTimeMillis).Append("\n");
            sb.Append("  Received: ").Append(Received).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DeliveryStatusDto);
        }

        /// <summary>
        /// Returns true if DeliveryStatusDto instances are equal
        /// </summary>
        /// <param name="input">Instance of DeliveryStatusDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DeliveryStatusDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SentId == input.SentId ||
                    (this.SentId != null &&
                    this.SentId.Equals(input.SentId))
                ) && 
                (
                    this.RemoteMtaIp == input.RemoteMtaIp ||
                    (this.RemoteMtaIp != null &&
                    this.RemoteMtaIp.Equals(input.RemoteMtaIp))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.ReportingMta == input.ReportingMta ||
                    (this.ReportingMta != null &&
                    this.ReportingMta.Equals(input.ReportingMta))
                ) && 
                (
                    this.Recipients == input.Recipients ||
                    this.Recipients != null &&
                    input.Recipients != null &&
                    this.Recipients.SequenceEqual(input.Recipients)
                ) && 
                (
                    this.SmtpResponse == input.SmtpResponse ||
                    (this.SmtpResponse != null &&
                    this.SmtpResponse.Equals(input.SmtpResponse))
                ) && 
                (
                    this.SmtpStatusCode == input.SmtpStatusCode ||
                    this.SmtpStatusCode.Equals(input.SmtpStatusCode)
                ) && 
                (
                    this.ProcessingTimeMillis == input.ProcessingTimeMillis ||
                    this.ProcessingTimeMillis.Equals(input.ProcessingTimeMillis)
                ) && 
                (
                    this.Received == input.Received ||
                    (this.Received != null &&
                    this.Received.Equals(input.Received))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.SentId != null)
                {
                    hashCode = (hashCode * 59) + this.SentId.GetHashCode();
                }
                if (this.RemoteMtaIp != null)
                {
                    hashCode = (hashCode * 59) + this.RemoteMtaIp.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.ReportingMta != null)
                {
                    hashCode = (hashCode * 59) + this.ReportingMta.GetHashCode();
                }
                if (this.Recipients != null)
                {
                    hashCode = (hashCode * 59) + this.Recipients.GetHashCode();
                }
                if (this.SmtpResponse != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpResponse.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpStatusCode.GetHashCode();
                hashCode = (hashCode * 59) + this.ProcessingTimeMillis.GetHashCode();
                if (this.Received != null)
                {
                    hashCode = (hashCode * 59) + this.Received.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DNSLookupsOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for multiple DNS queries
    /// </summary>
    [DataContract(Name = "DNSLookupsOptions")]
    public partial class DNSLookupsOptions : IEquatable<DNSLookupsOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupsOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DNSLookupsOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupsOptions" /> class.
        /// </summary>
        /// <param name="lookups">lookups (required).</param>
        public DNSLookupsOptions(List<DNSLookupOptions> lookups = default(List<DNSLookupOptions>))
        {
            // to ensure "lookups" is required (not null)
            if (lookups == null)
            {
                throw new ArgumentNullException("lookups is a required property for DNSLookupsOptions and cannot be null");
            }
            this.Lookups = lookups;
        }

        /// <summary>
        /// Gets or Sets Lookups
        /// </summary>
        [DataMember(Name = "lookups", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupOptions> Lookups { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DNSLookupsOptions {\n");
            sb.Append("  Lookups: ").Append(Lookups).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DNSLookupsOptions);
        }

        /// <summary>
        /// Returns true if DNSLookupsOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of DNSLookupsOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DNSLookupsOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Lookups == input.Lookups ||
                    this.Lookups != null &&
                    input.Lookups != null &&
                    this.Lookups.SequenceEqual(input.Lookups)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Lookups != null)
                {
                    hashCode = (hashCode * 59) + this.Lookups.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DNSLookupResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Results of query on domain name servers
    /// </summary>
    [DataContract(Name = "DNSLookupResults")]
    public partial class DNSLookupResults : IEquatable<DNSLookupResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DNSLookupResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupResults" /> class.
        /// </summary>
        /// <param name="results">results (required).</param>
        public DNSLookupResults(List<DNSLookupResult> results = default(List<DNSLookupResult>))
        {
            // to ensure "results" is required (not null)
            if (results == null)
            {
                throw new ArgumentNullException("results is a required property for DNSLookupResults and cannot be null");
            }
            this.Results = results;
        }

        /// <summary>
        /// Gets or Sets Results
        /// </summary>
        [DataMember(Name = "results", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupResult> Results { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DNSLookupResults {\n");
            sb.Append("  Results: ").Append(Results).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DNSLookupResults);
        }

        /// <summary>
        /// Returns true if DNSLookupResults instances are equal
        /// </summary>
        /// <param name="input">Instance of DNSLookupResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DNSLookupResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Results == input.Results ||
                    this.Results != null &&
                    input.Results != null &&
                    this.Results.SequenceEqual(input.Results)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Results != null)
                {
                    hashCode = (hashCode * 59) + this.Results.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DNSLookupResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// DNS lookup result. Includes record type, time to live, raw response, and name value for the name server response.
    /// </summary>
    [DataContract(Name = "DNSLookupResult")]
    public partial class DNSLookupResult : IEquatable<DNSLookupResult>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RecordTypeEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }


        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [DataMember(Name = "recordType", IsRequired = true, EmitDefaultValue = true)]
        public RecordTypeEnum RecordType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DNSLookupResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupResult" /> class.
        /// </summary>
        /// <param name="recordType">Domain Name Server Record Types (required).</param>
        /// <param name="ttl">ttl (required).</param>
        /// <param name="recordEntries">recordEntries (required).</param>
        /// <param name="name">name (required).</param>
        public DNSLookupResult(RecordTypeEnum recordType = default(RecordTypeEnum), long ttl = default(long), List<string> recordEntries = default(List<string>), string name = default(string))
        {
            this.RecordType = recordType;
            this.Ttl = ttl;
            // to ensure "recordEntries" is required (not null)
            if (recordEntries == null)
            {
                throw new ArgumentNullException("recordEntries is a required property for DNSLookupResult and cannot be null");
            }
            this.RecordEntries = recordEntries;
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for DNSLookupResult and cannot be null");
            }
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets Ttl
        /// </summary>
        [DataMember(Name = "ttl", IsRequired = true, EmitDefaultValue = true)]
        public long Ttl { get; set; }

        /// <summary>
        /// Gets or Sets RecordEntries
        /// </summary>
        [DataMember(Name = "recordEntries", IsRequired = true, EmitDefaultValue = true)]
        public List<string> RecordEntries { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DNSLookupResult {\n");
            sb.Append("  RecordType: ").Append(RecordType).Append("\n");
            sb.Append("  Ttl: ").Append(Ttl).Append("\n");
            sb.Append("  RecordEntries: ").Append(RecordEntries).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DNSLookupResult);
        }

        /// <summary>
        /// Returns true if DNSLookupResult instances are equal
        /// </summary>
        /// <param name="input">Instance of DNSLookupResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DNSLookupResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.RecordType == input.RecordType ||
                    this.RecordType.Equals(input.RecordType)
                ) && 
                (
                    this.Ttl == input.Ttl ||
                    this.Ttl.Equals(input.Ttl)
                ) && 
                (
                    this.RecordEntries == input.RecordEntries ||
                    this.RecordEntries != null &&
                    input.RecordEntries != null &&
                    this.RecordEntries.SequenceEqual(input.RecordEntries)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.RecordType.GetHashCode();
                hashCode = (hashCode * 59) + this.Ttl.GetHashCode();
                if (this.RecordEntries != null)
                {
                    hashCode = (hashCode * 59) + this.RecordEntries.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/DNSLookupOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for DNS query.
    /// </summary>
    [DataContract(Name = "DNSLookupOptions")]
    public partial class DNSLookupOptions : IEquatable<DNSLookupOptions>, IValidatableObject
    {
        /// <summary>
        /// Domain Name Server Record Types
        /// </summary>
        /// <value>Domain Name Server Record Types</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RecordTypesEnum
        {
            /// <summary>
            /// Enum A for value: A
            /// </summary>
            [EnumMember(Value = "A")]
            A = 1,

            /// <summary>
            /// Enum NS for value: NS
            /// </summary>
            [EnumMember(Value = "NS")]
            NS = 2,

            /// <summary>
            /// Enum MD for value: MD
            /// </summary>
            [EnumMember(Value = "MD")]
            MD = 3,

            /// <summary>
            /// Enum MF for value: MF
            /// </summary>
            [EnumMember(Value = "MF")]
            MF = 4,

            /// <summary>
            /// Enum CNAME for value: CNAME
            /// </summary>
            [EnumMember(Value = "CNAME")]
            CNAME = 5,

            /// <summary>
            /// Enum SOA for value: SOA
            /// </summary>
            [EnumMember(Value = "SOA")]
            SOA = 6,

            /// <summary>
            /// Enum MB for value: MB
            /// </summary>
            [EnumMember(Value = "MB")]
            MB = 7,

            /// <summary>
            /// Enum MG for value: MG
            /// </summary>
            [EnumMember(Value = "MG")]
            MG = 8,

            /// <summary>
            /// Enum MR for value: MR
            /// </summary>
            [EnumMember(Value = "MR")]
            MR = 9,

            /// <summary>
            /// Enum NULL for value: NULL
            /// </summary>
            [EnumMember(Value = "NULL")]
            NULL = 10,

            /// <summary>
            /// Enum WKS for value: WKS
            /// </summary>
            [EnumMember(Value = "WKS")]
            WKS = 11,

            /// <summary>
            /// Enum PTR for value: PTR
            /// </summary>
            [EnumMember(Value = "PTR")]
            PTR = 12,

            /// <summary>
            /// Enum HINFO for value: HINFO
            /// </summary>
            [EnumMember(Value = "HINFO")]
            HINFO = 13,

            /// <summary>
            /// Enum MINFO for value: MINFO
            /// </summary>
            [EnumMember(Value = "MINFO")]
            MINFO = 14,

            /// <summary>
            /// Enum MX for value: MX
            /// </summary>
            [EnumMember(Value = "MX")]
            MX = 15,

            /// <summary>
            /// Enum TXT for value: TXT
            /// </summary>
            [EnumMember(Value = "TXT")]
            TXT = 16,

            /// <summary>
            /// Enum RP for value: RP
            /// </summary>
            [EnumMember(Value = "RP")]
            RP = 17,

            /// <summary>
            /// Enum AFSDB for value: AFSDB
            /// </summary>
            [EnumMember(Value = "AFSDB")]
            AFSDB = 18,

            /// <summary>
            /// Enum X25 for value: X25
            /// </summary>
            [EnumMember(Value = "X25")]
            X25 = 19,

            /// <summary>
            /// Enum ISDN for value: ISDN
            /// </summary>
            [EnumMember(Value = "ISDN")]
            ISDN = 20,

            /// <summary>
            /// Enum RT for value: RT
            /// </summary>
            [EnumMember(Value = "RT")]
            RT = 21,

            /// <summary>
            /// Enum NSAP for value: NSAP
            /// </summary>
            [EnumMember(Value = "NSAP")]
            NSAP = 22,

            /// <summary>
            /// Enum NSAPPTR for value: NSAP_PTR
            /// </summary>
            [EnumMember(Value = "NSAP_PTR")]
            NSAPPTR = 23,

            /// <summary>
            /// Enum SIG for value: SIG
            /// </summary>
            [EnumMember(Value = "SIG")]
            SIG = 24,

            /// <summary>
            /// Enum KEY for value: KEY
            /// </summary>
            [EnumMember(Value = "KEY")]
            KEY = 25,

            /// <summary>
            /// Enum PX for value: PX
            /// </summary>
            [EnumMember(Value = "PX")]
            PX = 26,

            /// <summary>
            /// Enum GPOS for value: GPOS
            /// </summary>
            [EnumMember(Value = "GPOS")]
            GPOS = 27,

            /// <summary>
            /// Enum AAAA for value: AAAA
            /// </summary>
            [EnumMember(Value = "AAAA")]
            AAAA = 28,

            /// <summary>
            /// Enum LOC for value: LOC
            /// </summary>
            [EnumMember(Value = "LOC")]
            LOC = 29,

            /// <summary>
            /// Enum NXT for value: NXT
            /// </summary>
            [EnumMember(Value = "NXT")]
            NXT = 30,

            /// <summary>
            /// Enum EID for value: EID
            /// </summary>
            [EnumMember(Value = "EID")]
            EID = 31,

            /// <summary>
            /// Enum NIMLOC for value: NIMLOC
            /// </summary>
            [EnumMember(Value = "NIMLOC")]
            NIMLOC = 32,

            /// <summary>
            /// Enum SRV for value: SRV
            /// </summary>
            [EnumMember(Value = "SRV")]
            SRV = 33,

            /// <summary>
            /// Enum ATMA for value: ATMA
            /// </summary>
            [EnumMember(Value = "ATMA")]
            ATMA = 34,

            /// <summary>
            /// Enum NAPTR for value: NAPTR
            /// </summary>
            [EnumMember(Value = "NAPTR")]
            NAPTR = 35,

            /// <summary>
            /// Enum KX for value: KX
            /// </summary>
            [EnumMember(Value = "KX")]
            KX = 36,

            /// <summary>
            /// Enum CERT for value: CERT
            /// </summary>
            [EnumMember(Value = "CERT")]
            CERT = 37,

            /// <summary>
            /// Enum A6 for value: A6
            /// </summary>
            [EnumMember(Value = "A6")]
            A6 = 38,

            /// <summary>
            /// Enum DNAME for value: DNAME
            /// </summary>
            [EnumMember(Value = "DNAME")]
            DNAME = 39,

            /// <summary>
            /// Enum SINK for value: SINK
            /// </summary>
            [EnumMember(Value = "SINK")]
            SINK = 40,

            /// <summary>
            /// Enum OPT for value: OPT
            /// </summary>
            [EnumMember(Value = "OPT")]
            OPT = 41,

            /// <summary>
            /// Enum APL for value: APL
            /// </summary>
            [EnumMember(Value = "APL")]
            APL = 42,

            /// <summary>
            /// Enum DS for value: DS
            /// </summary>
            [EnumMember(Value = "DS")]
            DS = 43,

            /// <summary>
            /// Enum SSHFP for value: SSHFP
            /// </summary>
            [EnumMember(Value = "SSHFP")]
            SSHFP = 44,

            /// <summary>
            /// Enum IPSECKEY for value: IPSECKEY
            /// </summary>
            [EnumMember(Value = "IPSECKEY")]
            IPSECKEY = 45,

            /// <summary>
            /// Enum RRSIG for value: RRSIG
            /// </summary>
            [EnumMember(Value = "RRSIG")]
            RRSIG = 46,

            /// <summary>
            /// Enum NSEC for value: NSEC
            /// </summary>
            [EnumMember(Value = "NSEC")]
            NSEC = 47,

            /// <summary>
            /// Enum DNSKEY for value: DNSKEY
            /// </summary>
            [EnumMember(Value = "DNSKEY")]
            DNSKEY = 48,

            /// <summary>
            /// Enum DHCID for value: DHCID
            /// </summary>
            [EnumMember(Value = "DHCID")]
            DHCID = 49,

            /// <summary>
            /// Enum NSEC3 for value: NSEC3
            /// </summary>
            [EnumMember(Value = "NSEC3")]
            NSEC3 = 50,

            /// <summary>
            /// Enum NSEC3PARAM for value: NSEC3PARAM
            /// </summary>
            [EnumMember(Value = "NSEC3PARAM")]
            NSEC3PARAM = 51,

            /// <summary>
            /// Enum TLSA for value: TLSA
            /// </summary>
            [EnumMember(Value = "TLSA")]
            TLSA = 52,

            /// <summary>
            /// Enum SMIMEA for value: SMIMEA
            /// </summary>
            [EnumMember(Value = "SMIMEA")]
            SMIMEA = 53,

            /// <summary>
            /// Enum HIP for value: HIP
            /// </summary>
            [EnumMember(Value = "HIP")]
            HIP = 54,

            /// <summary>
            /// Enum NINFO for value: NINFO
            /// </summary>
            [EnumMember(Value = "NINFO")]
            NINFO = 55,

            /// <summary>
            /// Enum RKEY for value: RKEY
            /// </summary>
            [EnumMember(Value = "RKEY")]
            RKEY = 56,

            /// <summary>
            /// Enum TALINK for value: TALINK
            /// </summary>
            [EnumMember(Value = "TALINK")]
            TALINK = 57,

            /// <summary>
            /// Enum CDS for value: CDS
            /// </summary>
            [EnumMember(Value = "CDS")]
            CDS = 58,

            /// <summary>
            /// Enum CDNSKEY for value: CDNSKEY
            /// </summary>
            [EnumMember(Value = "CDNSKEY")]
            CDNSKEY = 59,

            /// <summary>
            /// Enum OPENPGPKEY for value: OPENPGPKEY
            /// </summary>
            [EnumMember(Value = "OPENPGPKEY")]
            OPENPGPKEY = 60,

            /// <summary>
            /// Enum CSYNC for value: CSYNC
            /// </summary>
            [EnumMember(Value = "CSYNC")]
            CSYNC = 61,

            /// <summary>
            /// Enum ZONEMD for value: ZONEMD
            /// </summary>
            [EnumMember(Value = "ZONEMD")]
            ZONEMD = 62,

            /// <summary>
            /// Enum SVCB for value: SVCB
            /// </summary>
            [EnumMember(Value = "SVCB")]
            SVCB = 63,

            /// <summary>
            /// Enum HTTPS for value: HTTPS
            /// </summary>
            [EnumMember(Value = "HTTPS")]
            HTTPS = 64,

            /// <summary>
            /// Enum SPF for value: SPF
            /// </summary>
            [EnumMember(Value = "SPF")]
            SPF = 65,

            /// <summary>
            /// Enum UINFO for value: UINFO
            /// </summary>
            [EnumMember(Value = "UINFO")]
            UINFO = 66,

            /// <summary>
            /// Enum UID for value: UID
            /// </summary>
            [EnumMember(Value = "UID")]
            UID = 67,

            /// <summary>
            /// Enum GID for value: GID
            /// </summary>
            [EnumMember(Value = "GID")]
            GID = 68,

            /// <summary>
            /// Enum UNSPEC for value: UNSPEC
            /// </summary>
            [EnumMember(Value = "UNSPEC")]
            UNSPEC = 69,

            /// <summary>
            /// Enum NID for value: NID
            /// </summary>
            [EnumMember(Value = "NID")]
            NID = 70,

            /// <summary>
            /// Enum L32 for value: L32
            /// </summary>
            [EnumMember(Value = "L32")]
            L32 = 71,

            /// <summary>
            /// Enum L64 for value: L64
            /// </summary>
            [EnumMember(Value = "L64")]
            L64 = 72,

            /// <summary>
            /// Enum LP for value: LP
            /// </summary>
            [EnumMember(Value = "LP")]
            LP = 73,

            /// <summary>
            /// Enum EUI48 for value: EUI48
            /// </summary>
            [EnumMember(Value = "EUI48")]
            EUI48 = 74,

            /// <summary>
            /// Enum EUI64 for value: EUI64
            /// </summary>
            [EnumMember(Value = "EUI64")]
            EUI64 = 75,

            /// <summary>
            /// Enum TKEY for value: TKEY
            /// </summary>
            [EnumMember(Value = "TKEY")]
            TKEY = 76,

            /// <summary>
            /// Enum TSIG for value: TSIG
            /// </summary>
            [EnumMember(Value = "TSIG")]
            TSIG = 77,

            /// <summary>
            /// Enum IXFR for value: IXFR
            /// </summary>
            [EnumMember(Value = "IXFR")]
            IXFR = 78,

            /// <summary>
            /// Enum AXFR for value: AXFR
            /// </summary>
            [EnumMember(Value = "AXFR")]
            AXFR = 79,

            /// <summary>
            /// Enum MAILB for value: MAILB
            /// </summary>
            [EnumMember(Value = "MAILB")]
            MAILB = 80,

            /// <summary>
            /// Enum MAILA for value: MAILA
            /// </summary>
            [EnumMember(Value = "MAILA")]
            MAILA = 81,

            /// <summary>
            /// Enum ANY for value: ANY
            /// </summary>
            [EnumMember(Value = "ANY")]
            ANY = 82,

            /// <summary>
            /// Enum URI for value: URI
            /// </summary>
            [EnumMember(Value = "URI")]
            URI = 83,

            /// <summary>
            /// Enum CAA for value: CAA
            /// </summary>
            [EnumMember(Value = "CAA")]
            CAA = 84,

            /// <summary>
            /// Enum AVC for value: AVC
            /// </summary>
            [EnumMember(Value = "AVC")]
            AVC = 85,

            /// <summary>
            /// Enum DOA for value: DOA
            /// </summary>
            [EnumMember(Value = "DOA")]
            DOA = 86,

            /// <summary>
            /// Enum AMTRELAY for value: AMTRELAY
            /// </summary>
            [EnumMember(Value = "AMTRELAY")]
            AMTRELAY = 87,

            /// <summary>
            /// Enum TA for value: TA
            /// </summary>
            [EnumMember(Value = "TA")]
            TA = 88,

            /// <summary>
            /// Enum DLV for value: DLV
            /// </summary>
            [EnumMember(Value = "DLV")]
            DLV = 89

        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected DNSLookupOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="DNSLookupOptions" /> class.
        /// </summary>
        /// <param name="hostname">List of record types you wish to query such as MX, DNS, TXT, NS, A etc. (required).</param>
        /// <param name="recordTypes">List of record types you wish to query such as MX, DNS, TXT, NS, A etc. (required).</param>
        /// <param name="omitFinalDNSDot">Optionally control whether to omit the final dot in full DNS name values. (required).</param>
        public DNSLookupOptions(string hostname = default(string), List<RecordTypesEnum> recordTypes = default(List<RecordTypesEnum>), bool omitFinalDNSDot = default(bool))
        {
            // to ensure "hostname" is required (not null)
            if (hostname == null)
            {
                throw new ArgumentNullException("hostname is a required property for DNSLookupOptions and cannot be null");
            }
            this.Hostname = hostname;
            // to ensure "recordTypes" is required (not null)
            if (recordTypes == null)
            {
                throw new ArgumentNullException("recordTypes is a required property for DNSLookupOptions and cannot be null");
            }
            this.RecordTypes = recordTypes;
            this.OmitFinalDNSDot = omitFinalDNSDot;
        }

        /// <summary>
        /// List of record types you wish to query such as MX, DNS, TXT, NS, A etc.
        /// </summary>
        /// <value>List of record types you wish to query such as MX, DNS, TXT, NS, A etc.</value>
        [DataMember(Name = "hostname", IsRequired = true, EmitDefaultValue = true)]
        public string Hostname { get; set; }

        /// <summary>
        /// List of record types you wish to query such as MX, DNS, TXT, NS, A etc.
        /// </summary>
        /// <value>List of record types you wish to query such as MX, DNS, TXT, NS, A etc.</value>
        [DataMember(Name = "recordTypes", IsRequired = true, EmitDefaultValue = true)]
        public List<DNSLookupOptions.RecordTypesEnum> RecordTypes { get; set; }

        /// <summary>
        /// Optionally control whether to omit the final dot in full DNS name values.
        /// </summary>
        /// <value>Optionally control whether to omit the final dot in full DNS name values.</value>
        [DataMember(Name = "omitFinalDNSDot", IsRequired = true, EmitDefaultValue = true)]
        public bool OmitFinalDNSDot { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class DNSLookupOptions {\n");
            sb.Append("  Hostname: ").Append(Hostname).Append("\n");
            sb.Append("  RecordTypes: ").Append(RecordTypes).Append("\n");
            sb.Append("  OmitFinalDNSDot: ").Append(OmitFinalDNSDot).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as DNSLookupOptions);
        }

        /// <summary>
        /// Returns true if DNSLookupOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of DNSLookupOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DNSLookupOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Hostname == input.Hostname ||
                    (this.Hostname != null &&
                    this.Hostname.Equals(input.Hostname))
                ) && 
                (
                    this.RecordTypes == input.RecordTypes ||
                    this.RecordTypes != null &&
                    input.RecordTypes != null &&
                    this.RecordTypes.SequenceEqual(input.RecordTypes)
                ) && 
                (
                    this.OmitFinalDNSDot == input.OmitFinalDNSDot ||
                    this.OmitFinalDNSDot.Equals(input.OmitFinalDNSDot)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Hostname != null)
                {
                    hashCode = (hashCode * 59) + this.Hostname.GetHashCode();
                }
                if (this.RecordTypes != null)
                {
                    hashCode = (hashCode * 59) + this.RecordTypes.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.OmitFinalDNSDot.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateWebhookOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating a webhook. Webhooks can be attached to inboxes and MailSlurp will POST a webhook payload to the URL specified whenever the webhook&#39;s event is triggered. Webhooks are great for processing many inbound emails and responding to other events at scale. Customize the payload sent to your endpoint by setting the &#x60;requestBodyTemplate&#x60; property to a string with moustache style variables. Property names from the standard payload model for the given event are available as variables.
    /// </summary>
    [DataContract(Name = "CreateWebhookOptions")]
    public partial class CreateWebhookOptions : IEquatable<CreateWebhookOptions>, IValidatableObject
    {
        /// <summary>
        /// Optional webhook event name. Default is &#x60;EMAIL_RECEIVED&#x60; and is triggered when an email is received by the inbox associated with the webhook. Payload differ according to the webhook event name.
        /// </summary>
        /// <value>Optional webhook event name. Default is &#x60;EMAIL_RECEIVED&#x60; and is triggered when an email is received by the inbox associated with the webhook. Payload differ according to the webhook event name.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Optional webhook event name. Default is &#x60;EMAIL_RECEIVED&#x60; and is triggered when an email is received by the inbox associated with the webhook. Payload differ according to the webhook event name.
        /// </summary>
        /// <value>Optional webhook event name. Default is &#x60;EMAIL_RECEIVED&#x60; and is triggered when an email is received by the inbox associated with the webhook. Payload differ according to the webhook event name.</value>
        [DataMember(Name = "eventName", EmitDefaultValue = true)]
        public EventNameEnum? EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateWebhookOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateWebhookOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateWebhookOptions" /> class.
        /// </summary>
        /// <param name="url">Public URL on your server that MailSlurp can post WebhookNotification payload to when an email is received or an event is trigger. The payload of the submitted JSON is dependent on the webhook event type. See docs.mailslurp.com/webhooks for event payload documentation. (required).</param>
        /// <param name="basicAuth">basicAuth.</param>
        /// <param name="name">Optional name for the webhook.</param>
        /// <param name="eventName">Optional webhook event name. Default is &#x60;EMAIL_RECEIVED&#x60; and is triggered when an email is received by the inbox associated with the webhook. Payload differ according to the webhook event name..</param>
        /// <param name="includeHeaders">includeHeaders.</param>
        /// <param name="requestBodyTemplate">Template for the JSON body of the webhook request that will be sent to your server. Use Moustache style &#x60;{{variableName}}&#x60; templating to use parts of the standard webhook payload for the given event..</param>
        /// <param name="useStaticIpRange">Use static IP range when calling webhook endpoint (default to false).</param>
        /// <param name="ignoreInsecureSslCertificates">Ignore insecure SSL certificates when sending request. Useful for self-signed certs..</param>
        public CreateWebhookOptions(string url = default(string), BasicAuthOptions basicAuth = default(BasicAuthOptions), string name = default(string), EventNameEnum? eventName = default(EventNameEnum?), WebhookHeaders includeHeaders = default(WebhookHeaders), string requestBodyTemplate = default(string), bool? useStaticIpRange = false, bool? ignoreInsecureSslCertificates = default(bool?))
        {
            // to ensure "url" is required (not null)
            if (url == null)
            {
                throw new ArgumentNullException("url is a required property for CreateWebhookOptions and cannot be null");
            }
            this.Url = url;
            this.BasicAuth = basicAuth;
            this.Name = name;
            this.EventName = eventName;
            this.IncludeHeaders = includeHeaders;
            this.RequestBodyTemplate = requestBodyTemplate;
            // use default value if no "useStaticIpRange" provided
            this.UseStaticIpRange = useStaticIpRange ?? false;
            this.IgnoreInsecureSslCertificates = ignoreInsecureSslCertificates;
        }

        /// <summary>
        /// Public URL on your server that MailSlurp can post WebhookNotification payload to when an email is received or an event is trigger. The payload of the submitted JSON is dependent on the webhook event type. See docs.mailslurp.com/webhooks for event payload documentation.
        /// </summary>
        /// <value>Public URL on your server that MailSlurp can post WebhookNotification payload to when an email is received or an event is trigger. The payload of the submitted JSON is dependent on the webhook event type. See docs.mailslurp.com/webhooks for event payload documentation.</value>
        [DataMember(Name = "url", IsRequired = true, EmitDefaultValue = true)]
        public string Url { get; set; }

        /// <summary>
        /// Gets or Sets BasicAuth
        /// </summary>
        [DataMember(Name = "basicAuth", EmitDefaultValue = true)]
        public BasicAuthOptions BasicAuth { get; set; }

        /// <summary>
        /// Optional name for the webhook
        /// </summary>
        /// <value>Optional name for the webhook</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets IncludeHeaders
        /// </summary>
        [DataMember(Name = "includeHeaders", EmitDefaultValue = false)]
        public WebhookHeaders IncludeHeaders { get; set; }

        /// <summary>
        /// Template for the JSON body of the webhook request that will be sent to your server. Use Moustache style &#x60;{{variableName}}&#x60; templating to use parts of the standard webhook payload for the given event.
        /// </summary>
        /// <value>Template for the JSON body of the webhook request that will be sent to your server. Use Moustache style &#x60;{{variableName}}&#x60; templating to use parts of the standard webhook payload for the given event.</value>
        [DataMember(Name = "requestBodyTemplate", EmitDefaultValue = true)]
        public string RequestBodyTemplate { get; set; }

        /// <summary>
        /// Use static IP range when calling webhook endpoint
        /// </summary>
        /// <value>Use static IP range when calling webhook endpoint</value>
        [DataMember(Name = "useStaticIpRange", EmitDefaultValue = true)]
        public bool? UseStaticIpRange { get; set; }

        /// <summary>
        /// Ignore insecure SSL certificates when sending request. Useful for self-signed certs.
        /// </summary>
        /// <value>Ignore insecure SSL certificates when sending request. Useful for self-signed certs.</value>
        [DataMember(Name = "ignoreInsecureSslCertificates", EmitDefaultValue = true)]
        public bool? IgnoreInsecureSslCertificates { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateWebhookOptions {\n");
            sb.Append("  Url: ").Append(Url).Append("\n");
            sb.Append("  BasicAuth: ").Append(BasicAuth).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  IncludeHeaders: ").Append(IncludeHeaders).Append("\n");
            sb.Append("  RequestBodyTemplate: ").Append(RequestBodyTemplate).Append("\n");
            sb.Append("  UseStaticIpRange: ").Append(UseStaticIpRange).Append("\n");
            sb.Append("  IgnoreInsecureSslCertificates: ").Append(IgnoreInsecureSslCertificates).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateWebhookOptions);
        }

        /// <summary>
        /// Returns true if CreateWebhookOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateWebhookOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateWebhookOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Url == input.Url ||
                    (this.Url != null &&
                    this.Url.Equals(input.Url))
                ) && 
                (
                    this.BasicAuth == input.BasicAuth ||
                    (this.BasicAuth != null &&
                    this.BasicAuth.Equals(input.BasicAuth))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.IncludeHeaders == input.IncludeHeaders ||
                    (this.IncludeHeaders != null &&
                    this.IncludeHeaders.Equals(input.IncludeHeaders))
                ) && 
                (
                    this.RequestBodyTemplate == input.RequestBodyTemplate ||
                    (this.RequestBodyTemplate != null &&
                    this.RequestBodyTemplate.Equals(input.RequestBodyTemplate))
                ) && 
                (
                    this.UseStaticIpRange == input.UseStaticIpRange ||
                    (this.UseStaticIpRange != null &&
                    this.UseStaticIpRange.Equals(input.UseStaticIpRange))
                ) && 
                (
                    this.IgnoreInsecureSslCertificates == input.IgnoreInsecureSslCertificates ||
                    (this.IgnoreInsecureSslCertificates != null &&
                    this.IgnoreInsecureSslCertificates.Equals(input.IgnoreInsecureSslCertificates))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Url != null)
                {
                    hashCode = (hashCode * 59) + this.Url.GetHashCode();
                }
                if (this.BasicAuth != null)
                {
                    hashCode = (hashCode * 59) + this.BasicAuth.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.IncludeHeaders != null)
                {
                    hashCode = (hashCode * 59) + this.IncludeHeaders.GetHashCode();
                }
                if (this.RequestBodyTemplate != null)
                {
                    hashCode = (hashCode * 59) + this.RequestBodyTemplate.GetHashCode();
                }
                if (this.UseStaticIpRange != null)
                {
                    hashCode = (hashCode * 59) + this.UseStaticIpRange.GetHashCode();
                }
                if (this.IgnoreInsecureSslCertificates != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreInsecureSslCertificates.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateTrackingPixelOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating a tracking pixel for email open tracking
    /// </summary>
    [DataContract(Name = "CreateTrackingPixelOptions")]
    public partial class CreateTrackingPixelOptions : IEquatable<CreateTrackingPixelOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateTrackingPixelOptions" /> class.
        /// </summary>
        /// <param name="name">name.</param>
        /// <param name="recipient">recipient.</param>
        public CreateTrackingPixelOptions(string name = default(string), string recipient = default(string))
        {
            this.Name = name;
            this.Recipient = recipient;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateTrackingPixelOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateTrackingPixelOptions);
        }

        /// <summary>
        /// Returns true if CreateTrackingPixelOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateTrackingPixelOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateTrackingPixelOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateTemplateOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Create template options
    /// </summary>
    [DataContract(Name = "CreateTemplateOptions")]
    public partial class CreateTemplateOptions : IEquatable<CreateTemplateOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateTemplateOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateTemplateOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateTemplateOptions" /> class.
        /// </summary>
        /// <param name="name">Name of template (required).</param>
        /// <param name="content">Template content. Can include moustache style variables such as {{var_name}} (required).</param>
        public CreateTemplateOptions(string name = default(string), string content = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for CreateTemplateOptions and cannot be null");
            }
            this.Name = name;
            // to ensure "content" is required (not null)
            if (content == null)
            {
                throw new ArgumentNullException("content is a required property for CreateTemplateOptions and cannot be null");
            }
            this.Content = content;
        }

        /// <summary>
        /// Name of template
        /// </summary>
        /// <value>Name of template</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Template content. Can include moustache style variables such as {{var_name}}
        /// </summary>
        /// <value>Template content. Can include moustache style variables such as {{var_name}}</value>
        [DataMember(Name = "content", IsRequired = true, EmitDefaultValue = true)]
        public string Content { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateTemplateOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateTemplateOptions);
        }

        /// <summary>
        /// Returns true if CreateTemplateOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateTemplateOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateTemplateOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Content == input.Content ||
                    (this.Content != null &&
                    this.Content.Equals(input.Content))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Content != null)
                {
                    hashCode = (hashCode * 59) + this.Content.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateInboxRulesetOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating inbox rulesets. Inbox rulesets can be used to block, allow, filter, or forward emails when sending or receiving using the inbox.
    /// </summary>
    [DataContract(Name = "CreateInboxRulesetOptions")]
    public partial class CreateInboxRulesetOptions : IEquatable<CreateInboxRulesetOptions>, IValidatableObject
    {
        /// <summary>
        /// What type of emails actions to apply ruleset to. Either &#x60;SENDING_EMAILS&#x60; or &#x60;RECEIVING_EMAILS&#x60; will apply action and target to any sending or receiving of emails respectively.
        /// </summary>
        /// <value>What type of emails actions to apply ruleset to. Either &#x60;SENDING_EMAILS&#x60; or &#x60;RECEIVING_EMAILS&#x60; will apply action and target to any sending or receiving of emails respectively.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ScopeEnum
        {
            /// <summary>
            /// Enum RECEIVINGEMAILS for value: RECEIVING_EMAILS
            /// </summary>
            [EnumMember(Value = "RECEIVING_EMAILS")]
            RECEIVINGEMAILS = 1,

            /// <summary>
            /// Enum SENDINGEMAILS for value: SENDING_EMAILS
            /// </summary>
            [EnumMember(Value = "SENDING_EMAILS")]
            SENDINGEMAILS = 2

        }


        /// <summary>
        /// What type of emails actions to apply ruleset to. Either &#x60;SENDING_EMAILS&#x60; or &#x60;RECEIVING_EMAILS&#x60; will apply action and target to any sending or receiving of emails respectively.
        /// </summary>
        /// <value>What type of emails actions to apply ruleset to. Either &#x60;SENDING_EMAILS&#x60; or &#x60;RECEIVING_EMAILS&#x60; will apply action and target to any sending or receiving of emails respectively.</value>
        [DataMember(Name = "scope", IsRequired = true, EmitDefaultValue = true)]
        public ScopeEnum Scope { get; set; }
        /// <summary>
        /// Action to be taken when the ruleset matches an email for the given scope. For example: &#x60;BLOCK&#x60; action with target &#x60;*&#x60; and scope &#x60;SENDING_EMAILS&#x60; blocks sending to all recipients. Note &#x60;ALLOW&#x60; takes precedent over &#x60;BLOCK&#x60;. &#x60;FILTER_REMOVE&#x60; is like block but will remove offending email addresses during a send or receive event instead of blocking the action.
        /// </summary>
        /// <value>Action to be taken when the ruleset matches an email for the given scope. For example: &#x60;BLOCK&#x60; action with target &#x60;*&#x60; and scope &#x60;SENDING_EMAILS&#x60; blocks sending to all recipients. Note &#x60;ALLOW&#x60; takes precedent over &#x60;BLOCK&#x60;. &#x60;FILTER_REMOVE&#x60; is like block but will remove offending email addresses during a send or receive event instead of blocking the action.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ActionEnum
        {
            /// <summary>
            /// Enum BLOCK for value: BLOCK
            /// </summary>
            [EnumMember(Value = "BLOCK")]
            BLOCK = 1,

            /// <summary>
            /// Enum ALLOW for value: ALLOW
            /// </summary>
            [EnumMember(Value = "ALLOW")]
            ALLOW = 2,

            /// <summary>
            /// Enum FILTERREMOVE for value: FILTER_REMOVE
            /// </summary>
            [EnumMember(Value = "FILTER_REMOVE")]
            FILTERREMOVE = 3

        }


        /// <summary>
        /// Action to be taken when the ruleset matches an email for the given scope. For example: &#x60;BLOCK&#x60; action with target &#x60;*&#x60; and scope &#x60;SENDING_EMAILS&#x60; blocks sending to all recipients. Note &#x60;ALLOW&#x60; takes precedent over &#x60;BLOCK&#x60;. &#x60;FILTER_REMOVE&#x60; is like block but will remove offending email addresses during a send or receive event instead of blocking the action.
        /// </summary>
        /// <value>Action to be taken when the ruleset matches an email for the given scope. For example: &#x60;BLOCK&#x60; action with target &#x60;*&#x60; and scope &#x60;SENDING_EMAILS&#x60; blocks sending to all recipients. Note &#x60;ALLOW&#x60; takes precedent over &#x60;BLOCK&#x60;. &#x60;FILTER_REMOVE&#x60; is like block but will remove offending email addresses during a send or receive event instead of blocking the action.</value>
        [DataMember(Name = "action", IsRequired = true, EmitDefaultValue = true)]
        public ActionEnum Action { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxRulesetOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateInboxRulesetOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxRulesetOptions" /> class.
        /// </summary>
        /// <param name="scope">What type of emails actions to apply ruleset to. Either &#x60;SENDING_EMAILS&#x60; or &#x60;RECEIVING_EMAILS&#x60; will apply action and target to any sending or receiving of emails respectively. (required).</param>
        /// <param name="action">Action to be taken when the ruleset matches an email for the given scope. For example: &#x60;BLOCK&#x60; action with target &#x60;*&#x60; and scope &#x60;SENDING_EMAILS&#x60; blocks sending to all recipients. Note &#x60;ALLOW&#x60; takes precedent over &#x60;BLOCK&#x60;. &#x60;FILTER_REMOVE&#x60; is like block but will remove offending email addresses during a send or receive event instead of blocking the action. (required).</param>
        /// <param name="target">Target to match emails with. Can be a wild-card type pattern or a valid email address. For instance &#x60;*@gmail.com&#x60; matches all gmail addresses while &#x60;test@gmail.com&#x60; matches one address exactly. The target is applied to every recipient field email address when &#x60;SENDING_EMAILS&#x60; is the scope and is applied to sender of email when &#x60;RECEIVING_EMAILS&#x60;. (required).</param>
        public CreateInboxRulesetOptions(ScopeEnum scope = default(ScopeEnum), ActionEnum action = default(ActionEnum), string target = default(string))
        {
            this.Scope = scope;
            this.Action = action;
            // to ensure "target" is required (not null)
            if (target == null)
            {
                throw new ArgumentNullException("target is a required property for CreateInboxRulesetOptions and cannot be null");
            }
            this.Target = target;
        }

        /// <summary>
        /// Target to match emails with. Can be a wild-card type pattern or a valid email address. For instance &#x60;*@gmail.com&#x60; matches all gmail addresses while &#x60;test@gmail.com&#x60; matches one address exactly. The target is applied to every recipient field email address when &#x60;SENDING_EMAILS&#x60; is the scope and is applied to sender of email when &#x60;RECEIVING_EMAILS&#x60;.
        /// </summary>
        /// <value>Target to match emails with. Can be a wild-card type pattern or a valid email address. For instance &#x60;*@gmail.com&#x60; matches all gmail addresses while &#x60;test@gmail.com&#x60; matches one address exactly. The target is applied to every recipient field email address when &#x60;SENDING_EMAILS&#x60; is the scope and is applied to sender of email when &#x60;RECEIVING_EMAILS&#x60;.</value>
        [DataMember(Name = "target", IsRequired = true, EmitDefaultValue = true)]
        public string Target { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateInboxRulesetOptions {\n");
            sb.Append("  Scope: ").Append(Scope).Append("\n");
            sb.Append("  Action: ").Append(Action).Append("\n");
            sb.Append("  Target: ").Append(Target).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateInboxRulesetOptions);
        }

        /// <summary>
        /// Returns true if CreateInboxRulesetOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateInboxRulesetOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateInboxRulesetOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Scope == input.Scope ||
                    this.Scope.Equals(input.Scope)
                ) && 
                (
                    this.Action == input.Action ||
                    this.Action.Equals(input.Action)
                ) && 
                (
                    this.Target == input.Target ||
                    (this.Target != null &&
                    this.Target.Equals(input.Target))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Scope.GetHashCode();
                hashCode = (hashCode * 59) + this.Action.GetHashCode();
                if (this.Target != null)
                {
                    hashCode = (hashCode * 59) + this.Target.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateInboxReplierOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating an inbox replier. Repliers can be attached to inboxes and send automated responses when an inbound email matches given criteria.
    /// </summary>
    [DataContract(Name = "CreateInboxReplierOptions")]
    public partial class CreateInboxReplierOptions : IEquatable<CreateInboxReplierOptions>, IValidatableObject
    {
        /// <summary>
        /// Field to match against to trigger inbox replier for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox replier for inbound email</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum RECIPIENTS for value: RECIPIENTS
            /// </summary>
            [EnumMember(Value = "RECIPIENTS")]
            RECIPIENTS = 1,

            /// <summary>
            /// Enum SENDER for value: SENDER
            /// </summary>
            [EnumMember(Value = "SENDER")]
            SENDER = 2,

            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 3,

            /// <summary>
            /// Enum ATTACHMENTS for value: ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "ATTACHMENTS")]
            ATTACHMENTS = 4

        }


        /// <summary>
        /// Field to match against to trigger inbox replier for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox replier for inbound email</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxReplierOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateInboxReplierOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxReplierOptions" /> class.
        /// </summary>
        /// <param name="inboxId">Inbox ID to attach replier to (required).</param>
        /// <param name="name">Name for replier.</param>
        /// <param name="field">Field to match against to trigger inbox replier for inbound email (required).</param>
        /// <param name="match">String or wildcard style match for field specified when evaluating reply rules. Use &#x60;*&#x60; to match anything. (required).</param>
        /// <param name="replyTo">Reply-to email address when sending replying.</param>
        /// <param name="subject">Subject override when replying to email.</param>
        /// <param name="from">Send email from address.</param>
        /// <param name="charset">Email reply charset.</param>
        /// <param name="ignoreReplyTo">Ignore sender replyTo when responding. Send directly to the sender if enabled..</param>
        /// <param name="isHTML">Send HTML email.</param>
        /// <param name="body">Email body for reply.</param>
        /// <param name="templateId">ID of template to use when sending a reply.</param>
        /// <param name="templateVariables">Template variable values.</param>
        public CreateInboxReplierOptions(Guid inboxId = default(Guid), string name = default(string), FieldEnum field = default(FieldEnum), string match = default(string), string replyTo = default(string), string subject = default(string), string from = default(string), string charset = default(string), bool? ignoreReplyTo = default(bool?), bool? isHTML = default(bool?), string body = default(string), Guid? templateId = default(Guid?), Dictionary<string, Object> templateVariables = default(Dictionary<string, Object>))
        {
            this.InboxId = inboxId;
            this.Field = field;
            // to ensure "match" is required (not null)
            if (match == null)
            {
                throw new ArgumentNullException("match is a required property for CreateInboxReplierOptions and cannot be null");
            }
            this.Match = match;
            this.Name = name;
            this.ReplyTo = replyTo;
            this.Subject = subject;
            this.From = from;
            this.Charset = charset;
            this.IgnoreReplyTo = ignoreReplyTo;
            this.IsHTML = isHTML;
            this.Body = body;
            this.TemplateId = templateId;
            this.TemplateVariables = templateVariables;
        }

        /// <summary>
        /// Inbox ID to attach replier to
        /// </summary>
        /// <value>Inbox ID to attach replier to</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Name for replier
        /// </summary>
        /// <value>Name for replier</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// String or wildcard style match for field specified when evaluating reply rules. Use &#x60;*&#x60; to match anything.
        /// </summary>
        /// <value>String or wildcard style match for field specified when evaluating reply rules. Use &#x60;*&#x60; to match anything.</value>
        [DataMember(Name = "match", IsRequired = true, EmitDefaultValue = true)]
        public string Match { get; set; }

        /// <summary>
        /// Reply-to email address when sending replying
        /// </summary>
        /// <value>Reply-to email address when sending replying</value>
        [DataMember(Name = "replyTo", EmitDefaultValue = true)]
        public string ReplyTo { get; set; }

        /// <summary>
        /// Subject override when replying to email
        /// </summary>
        /// <value>Subject override when replying to email</value>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Send email from address
        /// </summary>
        /// <value>Send email from address</value>
        [DataMember(Name = "from", EmitDefaultValue = true)]
        public string From { get; set; }

        /// <summary>
        /// Email reply charset
        /// </summary>
        /// <value>Email reply charset</value>
        [DataMember(Name = "charset", EmitDefaultValue = true)]
        public string Charset { get; set; }

        /// <summary>
        /// Ignore sender replyTo when responding. Send directly to the sender if enabled.
        /// </summary>
        /// <value>Ignore sender replyTo when responding. Send directly to the sender if enabled.</value>
        [DataMember(Name = "ignoreReplyTo", EmitDefaultValue = true)]
        public bool? IgnoreReplyTo { get; set; }

        /// <summary>
        /// Send HTML email
        /// </summary>
        /// <value>Send HTML email</value>
        [DataMember(Name = "isHTML", EmitDefaultValue = true)]
        public bool? IsHTML { get; set; }

        /// <summary>
        /// Email body for reply
        /// </summary>
        /// <value>Email body for reply</value>
        [DataMember(Name = "body", EmitDefaultValue = true)]
        public string Body { get; set; }

        /// <summary>
        /// ID of template to use when sending a reply
        /// </summary>
        /// <value>ID of template to use when sending a reply</value>
        [DataMember(Name = "templateId", EmitDefaultValue = true)]
        public Guid? TemplateId { get; set; }

        /// <summary>
        /// Template variable values
        /// </summary>
        /// <value>Template variable values</value>
        [DataMember(Name = "templateVariables", EmitDefaultValue = true)]
        public Dictionary<string, Object> TemplateVariables { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateInboxReplierOptions {\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Match: ").Append(Match).Append("\n");
            sb.Append("  ReplyTo: ").Append(ReplyTo).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  From: ").Append(From).Append("\n");
            sb.Append("  Charset: ").Append(Charset).Append("\n");
            sb.Append("  IgnoreReplyTo: ").Append(IgnoreReplyTo).Append("\n");
            sb.Append("  IsHTML: ").Append(IsHTML).Append("\n");
            sb.Append("  Body: ").Append(Body).Append("\n");
            sb.Append("  TemplateId: ").Append(TemplateId).Append("\n");
            sb.Append("  TemplateVariables: ").Append(TemplateVariables).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateInboxReplierOptions);
        }

        /// <summary>
        /// Returns true if CreateInboxReplierOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateInboxReplierOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateInboxReplierOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Match == input.Match ||
                    (this.Match != null &&
                    this.Match.Equals(input.Match))
                ) && 
                (
                    this.ReplyTo == input.ReplyTo ||
                    (this.ReplyTo != null &&
                    this.ReplyTo.Equals(input.ReplyTo))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.From == input.From ||
                    (this.From != null &&
                    this.From.Equals(input.From))
                ) && 
                (
                    this.Charset == input.Charset ||
                    (this.Charset != null &&
                    this.Charset.Equals(input.Charset))
                ) && 
                (
                    this.IgnoreReplyTo == input.IgnoreReplyTo ||
                    (this.IgnoreReplyTo != null &&
                    this.IgnoreReplyTo.Equals(input.IgnoreReplyTo))
                ) && 
                (
                    this.IsHTML == input.IsHTML ||
                    (this.IsHTML != null &&
                    this.IsHTML.Equals(input.IsHTML))
                ) && 
                (
                    this.Body == input.Body ||
                    (this.Body != null &&
                    this.Body.Equals(input.Body))
                ) && 
                (
                    this.TemplateId == input.TemplateId ||
                    (this.TemplateId != null &&
                    this.TemplateId.Equals(input.TemplateId))
                ) && 
                (
                    this.TemplateVariables == input.TemplateVariables ||
                    this.TemplateVariables != null &&
                    input.TemplateVariables != null &&
                    this.TemplateVariables.SequenceEqual(input.TemplateVariables)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                if (this.Match != null)
                {
                    hashCode = (hashCode * 59) + this.Match.GetHashCode();
                }
                if (this.ReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.ReplyTo.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.From != null)
                {
                    hashCode = (hashCode * 59) + this.From.GetHashCode();
                }
                if (this.Charset != null)
                {
                    hashCode = (hashCode * 59) + this.Charset.GetHashCode();
                }
                if (this.IgnoreReplyTo != null)
                {
                    hashCode = (hashCode * 59) + this.IgnoreReplyTo.GetHashCode();
                }
                if (this.IsHTML != null)
                {
                    hashCode = (hashCode * 59) + this.IsHTML.GetHashCode();
                }
                if (this.Body != null)
                {
                    hashCode = (hashCode * 59) + this.Body.GetHashCode();
                }
                if (this.TemplateId != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateId.GetHashCode();
                }
                if (this.TemplateVariables != null)
                {
                    hashCode = (hashCode * 59) + this.TemplateVariables.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateInboxForwarderOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating an inbox forwarder
    /// </summary>
    [DataContract(Name = "CreateInboxForwarderOptions")]
    public partial class CreateInboxForwarderOptions : IEquatable<CreateInboxForwarderOptions>, IValidatableObject
    {
        /// <summary>
        /// Field to match against to trigger inbox forwarding for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox forwarding for inbound email</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum FieldEnum
        {
            /// <summary>
            /// Enum RECIPIENTS for value: RECIPIENTS
            /// </summary>
            [EnumMember(Value = "RECIPIENTS")]
            RECIPIENTS = 1,

            /// <summary>
            /// Enum SENDER for value: SENDER
            /// </summary>
            [EnumMember(Value = "SENDER")]
            SENDER = 2,

            /// <summary>
            /// Enum SUBJECT for value: SUBJECT
            /// </summary>
            [EnumMember(Value = "SUBJECT")]
            SUBJECT = 3,

            /// <summary>
            /// Enum ATTACHMENTS for value: ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "ATTACHMENTS")]
            ATTACHMENTS = 4

        }


        /// <summary>
        /// Field to match against to trigger inbox forwarding for inbound email
        /// </summary>
        /// <value>Field to match against to trigger inbox forwarding for inbound email</value>
        [DataMember(Name = "field", IsRequired = true, EmitDefaultValue = true)]
        public FieldEnum Field { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxForwarderOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateInboxForwarderOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxForwarderOptions" /> class.
        /// </summary>
        /// <param name="field">Field to match against to trigger inbox forwarding for inbound email (required).</param>
        /// <param name="match">String or wildcard style match for field specified when evaluating forwarding rules (required).</param>
        /// <param name="forwardToRecipients">Email addresses to forward an email to if it matches the field and match criteria of the forwarder (required).</param>
        public CreateInboxForwarderOptions(FieldEnum field = default(FieldEnum), string match = default(string), List<string> forwardToRecipients = default(List<string>))
        {
            this.Field = field;
            // to ensure "match" is required (not null)
            if (match == null)
            {
                throw new ArgumentNullException("match is a required property for CreateInboxForwarderOptions and cannot be null");
            }
            this.Match = match;
            // to ensure "forwardToRecipients" is required (not null)
            if (forwardToRecipients == null)
            {
                throw new ArgumentNullException("forwardToRecipients is a required property for CreateInboxForwarderOptions and cannot be null");
            }
            this.ForwardToRecipients = forwardToRecipients;
        }

        /// <summary>
        /// String or wildcard style match for field specified when evaluating forwarding rules
        /// </summary>
        /// <value>String or wildcard style match for field specified when evaluating forwarding rules</value>
        [DataMember(Name = "match", IsRequired = true, EmitDefaultValue = true)]
        public string Match { get; set; }

        /// <summary>
        /// Email addresses to forward an email to if it matches the field and match criteria of the forwarder
        /// </summary>
        /// <value>Email addresses to forward an email to if it matches the field and match criteria of the forwarder</value>
        [DataMember(Name = "forwardToRecipients", IsRequired = true, EmitDefaultValue = true)]
        public List<string> ForwardToRecipients { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateInboxForwarderOptions {\n");
            sb.Append("  Field: ").Append(Field).Append("\n");
            sb.Append("  Match: ").Append(Match).Append("\n");
            sb.Append("  ForwardToRecipients: ").Append(ForwardToRecipients).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateInboxForwarderOptions);
        }

        /// <summary>
        /// Returns true if CreateInboxForwarderOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateInboxForwarderOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateInboxForwarderOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Field == input.Field ||
                    this.Field.Equals(input.Field)
                ) && 
                (
                    this.Match == input.Match ||
                    (this.Match != null &&
                    this.Match.Equals(input.Match))
                ) && 
                (
                    this.ForwardToRecipients == input.ForwardToRecipients ||
                    this.ForwardToRecipients != null &&
                    input.ForwardToRecipients != null &&
                    this.ForwardToRecipients.SequenceEqual(input.ForwardToRecipients)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Field.GetHashCode();
                if (this.Match != null)
                {
                    hashCode = (hashCode * 59) + this.Match.GetHashCode();
                }
                if (this.ForwardToRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.ForwardToRecipients.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateInboxDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating an inbox. An inbox has a real email address that can send and receive emails. Inboxes can be permanent or expire at a given time. Inboxes are either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; mailboxes. &#x60;SMTP&#x60; inboxes are processed by a mail server running at &#x60;mailslurp.mx&#x60; while &#x60;HTTP&#x60; inboxes are processed by AWS SES backed mailservers. An inbox email address is randomly assigned by default ending in either &#x60;mailslurp.com&#x60; or (if &#x60;useDomainPool&#x60; is enabled) ending in a similar domain such as &#x60;mailslurp.xyz&#x60; (selected at random). To specify an address use a custom domain: either pass the &#x60;emailAddress&#x60; options with &#x60;&lt;your-recipient&gt;@&lt;your-domain&gt;&#x60;. To create a randomized address for your domain set the &#x60;domainName&#x60; to the domain you have verified or pass the &#x60;domainId&#x60;. Virtual inboxes prevent outbound sending and instead trap mail.
    /// </summary>
    [DataContract(Name = "CreateInboxDto")]
    public partial class CreateInboxDto : IEquatable<CreateInboxDto>, IValidatableObject
    {
        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InboxTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPINBOX for value: SMTP_INBOX
            /// </summary>
            [EnumMember(Value = "SMTP_INBOX")]
            SMTPINBOX = 2

        }


        /// <summary>
        /// Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).
        /// </summary>
        /// <value>Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send).</value>
        [DataMember(Name = "inboxType", EmitDefaultValue = true)]
        public InboxTypeEnum? InboxType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateInboxDto" /> class.
        /// </summary>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID..</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox..</param>
        /// <param name="domainId">ID of custom domain to use for email address..</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails..</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with.</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types..</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI..</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX..</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering.</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for.</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization..</param>
        /// <param name="inboxType">Type of inbox. HTTP inboxes are faster and better for most cases. SMTP inboxes are more suited for public facing inbound messages (but cannot send)..</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending..</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters.</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification..</param>
        public CreateInboxDto(string emailAddress = default(string), string domainName = default(string), Guid? domainId = default(Guid?), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), List<string> tags = default(List<string>), DateTime? expiresAt = default(DateTime?), bool? favourite = default(bool?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), InboxTypeEnum? inboxType = default(InboxTypeEnum?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string prefix = default(string))
        {
            this.EmailAddress = emailAddress;
            this.DomainName = domainName;
            this.DomainId = domainId;
            this.Name = name;
            this.Description = description;
            this.UseDomainPool = useDomainPool;
            this.Tags = tags;
            this.ExpiresAt = expiresAt;
            this.Favourite = favourite;
            this.ExpiresIn = expiresIn;
            this.AllowTeamAccess = allowTeamAccess;
            this.InboxType = inboxType;
            this.VirtualInbox = virtualInbox;
            this.UseShortAddress = useShortAddress;
            this.Prefix = prefix;
        }

        /// <summary>
        /// A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.
        /// </summary>
        /// <value>A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID.</value>
        [DataMember(Name = "emailAddress", EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox.
        /// </summary>
        /// <value>FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox.</value>
        [DataMember(Name = "domainName", EmitDefaultValue = true)]
        public string DomainName { get; set; }

        /// <summary>
        /// ID of custom domain to use for email address.
        /// </summary>
        /// <value>ID of custom domain to use for email address.</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails.
        /// </summary>
        /// <value>Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails.</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with
        /// </summary>
        /// <value>Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with</value>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types.
        /// </summary>
        /// <value>Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types.</value>
        [DataMember(Name = "useDomainPool", EmitDefaultValue = true)]
        public bool? UseDomainPool { get; set; }

        /// <summary>
        /// Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.
        /// </summary>
        /// <value>Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI.</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX.
        /// </summary>
        /// <value>Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX.</value>
        [DataMember(Name = "expiresAt", EmitDefaultValue = true)]
        public DateTime? ExpiresAt { get; set; }

        /// <summary>
        /// Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering
        /// </summary>
        /// <value>Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering</value>
        [DataMember(Name = "favourite", EmitDefaultValue = true)]
        public bool? Favourite { get; set; }

        /// <summary>
        /// Number of milliseconds that inbox should exist for
        /// </summary>
        /// <value>Number of milliseconds that inbox should exist for</value>
        [DataMember(Name = "expiresIn", EmitDefaultValue = true)]
        public long? ExpiresIn { get; set; }

        /// <summary>
        /// DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization.
        /// </summary>
        /// <value>DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization.</value>
        [DataMember(Name = "allowTeamAccess", EmitDefaultValue = true)]
        public bool? AllowTeamAccess { get; set; }

        /// <summary>
        /// Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending.
        /// </summary>
        /// <value>Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending.</value>
        [DataMember(Name = "virtualInbox", EmitDefaultValue = true)]
        public bool? VirtualInbox { get; set; }

        /// <summary>
        /// Use a shorter email address under 31 characters
        /// </summary>
        /// <value>Use a shorter email address under 31 characters</value>
        [DataMember(Name = "useShortAddress", EmitDefaultValue = true)]
        public bool? UseShortAddress { get; set; }

        /// <summary>
        /// Prefix to add before the email address for easier labelling or identification.
        /// </summary>
        /// <value>Prefix to add before the email address for easier labelling or identification.</value>
        [DataMember(Name = "prefix", EmitDefaultValue = true)]
        public string Prefix { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateInboxDto {\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  DomainName: ").Append(DomainName).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  UseDomainPool: ").Append(UseDomainPool).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  ExpiresAt: ").Append(ExpiresAt).Append("\n");
            sb.Append("  Favourite: ").Append(Favourite).Append("\n");
            sb.Append("  ExpiresIn: ").Append(ExpiresIn).Append("\n");
            sb.Append("  AllowTeamAccess: ").Append(AllowTeamAccess).Append("\n");
            sb.Append("  InboxType: ").Append(InboxType).Append("\n");
            sb.Append("  VirtualInbox: ").Append(VirtualInbox).Append("\n");
            sb.Append("  UseShortAddress: ").Append(UseShortAddress).Append("\n");
            sb.Append("  Prefix: ").Append(Prefix).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateInboxDto);
        }

        /// <summary>
        /// Returns true if CreateInboxDto instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateInboxDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateInboxDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.DomainName == input.DomainName ||
                    (this.DomainName != null &&
                    this.DomainName.Equals(input.DomainName))
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.UseDomainPool == input.UseDomainPool ||
                    (this.UseDomainPool != null &&
                    this.UseDomainPool.Equals(input.UseDomainPool))
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.ExpiresAt == input.ExpiresAt ||
                    (this.ExpiresAt != null &&
                    this.ExpiresAt.Equals(input.ExpiresAt))
                ) && 
                (
                    this.Favourite == input.Favourite ||
                    (this.Favourite != null &&
                    this.Favourite.Equals(input.Favourite))
                ) && 
                (
                    this.ExpiresIn == input.ExpiresIn ||
                    (this.ExpiresIn != null &&
                    this.ExpiresIn.Equals(input.ExpiresIn))
                ) && 
                (
                    this.AllowTeamAccess == input.AllowTeamAccess ||
                    (this.AllowTeamAccess != null &&
                    this.AllowTeamAccess.Equals(input.AllowTeamAccess))
                ) && 
                (
                    this.InboxType == input.InboxType ||
                    this.InboxType.Equals(input.InboxType)
                ) && 
                (
                    this.VirtualInbox == input.VirtualInbox ||
                    (this.VirtualInbox != null &&
                    this.VirtualInbox.Equals(input.VirtualInbox))
                ) && 
                (
                    this.UseShortAddress == input.UseShortAddress ||
                    (this.UseShortAddress != null &&
                    this.UseShortAddress.Equals(input.UseShortAddress))
                ) && 
                (
                    this.Prefix == input.Prefix ||
                    (this.Prefix != null &&
                    this.Prefix.Equals(input.Prefix))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.DomainName != null)
                {
                    hashCode = (hashCode * 59) + this.DomainName.GetHashCode();
                }
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                if (this.UseDomainPool != null)
                {
                    hashCode = (hashCode * 59) + this.UseDomainPool.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                if (this.ExpiresAt != null)
                {
                    hashCode = (hashCode * 59) + this.ExpiresAt.GetHashCode();
                }
                if (this.Favourite != null)
                {
                    hashCode = (hashCode * 59) + this.Favourite.GetHashCode();
                }
                if (this.ExpiresIn != null)
                {
                    hashCode = (hashCode * 59) + this.ExpiresIn.GetHashCode();
                }
                if (this.AllowTeamAccess != null)
                {
                    hashCode = (hashCode * 59) + this.AllowTeamAccess.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.InboxType.GetHashCode();
                if (this.VirtualInbox != null)
                {
                    hashCode = (hashCode * 59) + this.VirtualInbox.GetHashCode();
                }
                if (this.UseShortAddress != null)
                {
                    hashCode = (hashCode * 59) + this.UseShortAddress.GetHashCode();
                }
                if (this.Prefix != null)
                {
                    hashCode = (hashCode * 59) + this.Prefix.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateGroupOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Create contact group options
    /// </summary>
    [DataContract(Name = "CreateGroupOptions")]
    public partial class CreateGroupOptions : IEquatable<CreateGroupOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateGroupOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateGroupOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateGroupOptions" /> class.
        /// </summary>
        /// <param name="name">name (required).</param>
        /// <param name="description">description.</param>
        public CreateGroupOptions(string name = default(string), string description = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for CreateGroupOptions and cannot be null");
            }
            this.Name = name;
            this.Description = description;
        }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Description
        /// </summary>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateGroupOptions {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateGroupOptions);
        }

        /// <summary>
        /// Returns true if CreateGroupOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateGroupOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateGroupOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateEmergencyAddressOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CreateEmergencyAddressOptions
    /// </summary>
    [DataContract(Name = "CreateEmergencyAddressOptions")]
    public partial class CreateEmergencyAddressOptions : IEquatable<CreateEmergencyAddressOptions>, IValidatableObject
    {
        /// <summary>
        /// Defines IsoCountryCode
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum IsoCountryCodeEnum
        {
            /// <summary>
            /// Enum US for value: US
            /// </summary>
            [EnumMember(Value = "US")]
            US = 1,

            /// <summary>
            /// Enum GB for value: GB
            /// </summary>
            [EnumMember(Value = "GB")]
            GB = 2,

            /// <summary>
            /// Enum AU for value: AU
            /// </summary>
            [EnumMember(Value = "AU")]
            AU = 3

        }


        /// <summary>
        /// Gets or Sets IsoCountryCode
        /// </summary>
        [DataMember(Name = "isoCountryCode", IsRequired = true, EmitDefaultValue = true)]
        public IsoCountryCodeEnum IsoCountryCode { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateEmergencyAddressOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateEmergencyAddressOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateEmergencyAddressOptions" /> class.
        /// </summary>
        /// <param name="customerName">customerName (required).</param>
        /// <param name="address1">address1 (required).</param>
        /// <param name="city">city (required).</param>
        /// <param name="region">region (required).</param>
        /// <param name="postalCode">postalCode (required).</param>
        /// <param name="isoCountryCode">isoCountryCode (required).</param>
        /// <param name="displayName">displayName.</param>
        public CreateEmergencyAddressOptions(string customerName = default(string), string address1 = default(string), string city = default(string), string region = default(string), string postalCode = default(string), IsoCountryCodeEnum isoCountryCode = default(IsoCountryCodeEnum), string displayName = default(string))
        {
            // to ensure "customerName" is required (not null)
            if (customerName == null)
            {
                throw new ArgumentNullException("customerName is a required property for CreateEmergencyAddressOptions and cannot be null");
            }
            this.CustomerName = customerName;
            // to ensure "address1" is required (not null)
            if (address1 == null)
            {
                throw new ArgumentNullException("address1 is a required property for CreateEmergencyAddressOptions and cannot be null");
            }
            this.Address1 = address1;
            // to ensure "city" is required (not null)
            if (city == null)
            {
                throw new ArgumentNullException("city is a required property for CreateEmergencyAddressOptions and cannot be null");
            }
            this.City = city;
            // to ensure "region" is required (not null)
            if (region == null)
            {
                throw new ArgumentNullException("region is a required property for CreateEmergencyAddressOptions and cannot be null");
            }
            this.Region = region;
            // to ensure "postalCode" is required (not null)
            if (postalCode == null)
            {
                throw new ArgumentNullException("postalCode is a required property for CreateEmergencyAddressOptions and cannot be null");
            }
            this.PostalCode = postalCode;
            this.IsoCountryCode = isoCountryCode;
            this.DisplayName = displayName;
        }

        /// <summary>
        /// Gets or Sets CustomerName
        /// </summary>
        [DataMember(Name = "customerName", IsRequired = true, EmitDefaultValue = true)]
        public string CustomerName { get; set; }

        /// <summary>
        /// Gets or Sets Address1
        /// </summary>
        [DataMember(Name = "address1", IsRequired = true, EmitDefaultValue = true)]
        public string Address1 { get; set; }

        /// <summary>
        /// Gets or Sets City
        /// </summary>
        [DataMember(Name = "city", IsRequired = true, EmitDefaultValue = true)]
        public string City { get; set; }

        /// <summary>
        /// Gets or Sets Region
        /// </summary>
        [DataMember(Name = "region", IsRequired = true, EmitDefaultValue = true)]
        public string Region { get; set; }

        /// <summary>
        /// Gets or Sets PostalCode
        /// </summary>
        [DataMember(Name = "postalCode", IsRequired = true, EmitDefaultValue = true)]
        public string PostalCode { get; set; }

        /// <summary>
        /// Gets or Sets DisplayName
        /// </summary>
        [DataMember(Name = "displayName", EmitDefaultValue = false)]
        public string DisplayName { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateEmergencyAddressOptions {\n");
            sb.Append("  CustomerName: ").Append(CustomerName).Append("\n");
            sb.Append("  Address1: ").Append(Address1).Append("\n");
            sb.Append("  City: ").Append(City).Append("\n");
            sb.Append("  Region: ").Append(Region).Append("\n");
            sb.Append("  PostalCode: ").Append(PostalCode).Append("\n");
            sb.Append("  IsoCountryCode: ").Append(IsoCountryCode).Append("\n");
            sb.Append("  DisplayName: ").Append(DisplayName).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateEmergencyAddressOptions);
        }

        /// <summary>
        /// Returns true if CreateEmergencyAddressOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateEmergencyAddressOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateEmergencyAddressOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CustomerName == input.CustomerName ||
                    (this.CustomerName != null &&
                    this.CustomerName.Equals(input.CustomerName))
                ) && 
                (
                    this.Address1 == input.Address1 ||
                    (this.Address1 != null &&
                    this.Address1.Equals(input.Address1))
                ) && 
                (
                    this.City == input.City ||
                    (this.City != null &&
                    this.City.Equals(input.City))
                ) && 
                (
                    this.Region == input.Region ||
                    (this.Region != null &&
                    this.Region.Equals(input.Region))
                ) && 
                (
                    this.PostalCode == input.PostalCode ||
                    (this.PostalCode != null &&
                    this.PostalCode.Equals(input.PostalCode))
                ) && 
                (
                    this.IsoCountryCode == input.IsoCountryCode ||
                    this.IsoCountryCode.Equals(input.IsoCountryCode)
                ) && 
                (
                    this.DisplayName == input.DisplayName ||
                    (this.DisplayName != null &&
                    this.DisplayName.Equals(input.DisplayName))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CustomerName != null)
                {
                    hashCode = (hashCode * 59) + this.CustomerName.GetHashCode();
                }
                if (this.Address1 != null)
                {
                    hashCode = (hashCode * 59) + this.Address1.GetHashCode();
                }
                if (this.City != null)
                {
                    hashCode = (hashCode * 59) + this.City.GetHashCode();
                }
                if (this.Region != null)
                {
                    hashCode = (hashCode * 59) + this.Region.GetHashCode();
                }
                if (this.PostalCode != null)
                {
                    hashCode = (hashCode * 59) + this.PostalCode.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsoCountryCode.GetHashCode();
                if (this.DisplayName != null)
                {
                    hashCode = (hashCode * 59) + this.DisplayName.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateDomainOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating a domain to use with MailSlurp. You must have ownership access to this domain in order to verify it. Domains will not function correctly until the domain has been verified. See https://www.mailslurp.com/guides/custom-domains for help. Domains can be either &#x60;HTTP&#x60; or &#x60;SMTP&#x60; type. The type of domain determines which inboxes can be used with it. &#x60;SMTP&#x60; inboxes use a mail server running &#x60;mxslurp.click&#x60; while &#x60;HTTP&#x60; inboxes are handled by AWS SES.
    /// </summary>
    [DataContract(Name = "CreateDomainOptions")]
    public partial class CreateDomainOptions : IEquatable<CreateDomainOptions>, IValidatableObject
    {
        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DomainTypeEnum
        {
            /// <summary>
            /// Enum HTTPINBOX for value: HTTP_INBOX
            /// </summary>
            [EnumMember(Value = "HTTP_INBOX")]
            HTTPINBOX = 1,

            /// <summary>
            /// Enum SMTPDOMAIN for value: SMTP_DOMAIN
            /// </summary>
            [EnumMember(Value = "SMTP_DOMAIN")]
            SMTPDOMAIN = 2

        }


        /// <summary>
        /// Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.
        /// </summary>
        /// <value>Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails.</value>
        [DataMember(Name = "domainType", EmitDefaultValue = true)]
        public DomainTypeEnum? DomainType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateDomainOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateDomainOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateDomainOptions" /> class.
        /// </summary>
        /// <param name="domain">The top level domain you wish to use with MailSlurp. Do not specify subdomain just the top level. So &#x60;test.com&#x60; covers all subdomains such as &#x60;mail.test.com&#x60;. Don&#39;t include a protocol such as &#x60;http://&#x60;. Once added you must complete the verification steps by adding the returned records to your domain. (required).</param>
        /// <param name="description">Optional description of the domain..</param>
        /// <param name="createdCatchAllInbox">Whether to create a catch all inbox for the domain. Any email sent to an address using your domain that cannot be matched to an existing inbox you created with the domain will be routed to the created catch all inbox. You can access emails using the regular methods on this inbox ID..</param>
        /// <param name="domainType">Type of domain. Dictates type of inbox that can be created with domain. HTTP means inboxes are processed using SES while SMTP inboxes use a custom SMTP mail server. SMTP does not support sending so use HTTP for sending emails..</param>
        public CreateDomainOptions(string domain = default(string), string description = default(string), bool? createdCatchAllInbox = default(bool?), DomainTypeEnum? domainType = default(DomainTypeEnum?))
        {
            // to ensure "domain" is required (not null)
            if (domain == null)
            {
                throw new ArgumentNullException("domain is a required property for CreateDomainOptions and cannot be null");
            }
            this.Domain = domain;
            this.Description = description;
            this.CreatedCatchAllInbox = createdCatchAllInbox;
            this.DomainType = domainType;
        }

        /// <summary>
        /// The top level domain you wish to use with MailSlurp. Do not specify subdomain just the top level. So &#x60;test.com&#x60; covers all subdomains such as &#x60;mail.test.com&#x60;. Don&#39;t include a protocol such as &#x60;http://&#x60;. Once added you must complete the verification steps by adding the returned records to your domain.
        /// </summary>
        /// <value>The top level domain you wish to use with MailSlurp. Do not specify subdomain just the top level. So &#x60;test.com&#x60; covers all subdomains such as &#x60;mail.test.com&#x60;. Don&#39;t include a protocol such as &#x60;http://&#x60;. Once added you must complete the verification steps by adding the returned records to your domain.</value>
        [DataMember(Name = "domain", IsRequired = true, EmitDefaultValue = true)]
        public string Domain { get; set; }

        /// <summary>
        /// Optional description of the domain.
        /// </summary>
        /// <value>Optional description of the domain.</value>
        [DataMember(Name = "description", EmitDefaultValue = true)]
        public string Description { get; set; }

        /// <summary>
        /// Whether to create a catch all inbox for the domain. Any email sent to an address using your domain that cannot be matched to an existing inbox you created with the domain will be routed to the created catch all inbox. You can access emails using the regular methods on this inbox ID.
        /// </summary>
        /// <value>Whether to create a catch all inbox for the domain. Any email sent to an address using your domain that cannot be matched to an existing inbox you created with the domain will be routed to the created catch all inbox. You can access emails using the regular methods on this inbox ID.</value>
        [DataMember(Name = "createdCatchAllInbox", EmitDefaultValue = true)]
        public bool? CreatedCatchAllInbox { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateDomainOptions {\n");
            sb.Append("  Domain: ").Append(Domain).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  CreatedCatchAllInbox: ").Append(CreatedCatchAllInbox).Append("\n");
            sb.Append("  DomainType: ").Append(DomainType).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateDomainOptions);
        }

        /// <summary>
        /// Returns true if CreateDomainOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateDomainOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateDomainOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Domain == input.Domain ||
                    (this.Domain != null &&
                    this.Domain.Equals(input.Domain))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.CreatedCatchAllInbox == input.CreatedCatchAllInbox ||
                    (this.CreatedCatchAllInbox != null &&
                    this.CreatedCatchAllInbox.Equals(input.CreatedCatchAllInbox))
                ) && 
                (
                    this.DomainType == input.DomainType ||
                    this.DomainType.Equals(input.DomainType)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Domain != null)
                {
                    hashCode = (hashCode * 59) + this.Domain.GetHashCode();
                }
                if (this.Description != null)
                {
                    hashCode = (hashCode * 59) + this.Description.GetHashCode();
                }
                if (this.CreatedCatchAllInbox != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedCatchAllInbox.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.DomainType.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateContactOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating an email contact in address book
    /// </summary>
    [DataContract(Name = "CreateContactOptions")]
    public partial class CreateContactOptions : IEquatable<CreateContactOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateContactOptions" /> class.
        /// </summary>
        /// <param name="firstName">firstName.</param>
        /// <param name="lastName">lastName.</param>
        /// <param name="company">company.</param>
        /// <param name="emailAddresses">Set of email addresses belonging to the contact.</param>
        /// <param name="tags">Tags that can be used to search and group contacts.</param>
        /// <param name="metaData">metaData.</param>
        /// <param name="optOut">Has the user explicitly or implicitly opted out of being contacted? If so MailSlurp will ignore them in all actions..</param>
        /// <param name="groupId">Group IDs that contact belongs to.</param>
        /// <param name="verifyEmailAddresses">Whether to validate contact email address exists.</param>
        public CreateContactOptions(string firstName = default(string), string lastName = default(string), string company = default(string), List<string> emailAddresses = default(List<string>), List<string> tags = default(List<string>), Object metaData = default(Object), bool? optOut = default(bool?), Guid? groupId = default(Guid?), bool? verifyEmailAddresses = default(bool?))
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Company = company;
            this.EmailAddresses = emailAddresses;
            this.Tags = tags;
            this.MetaData = metaData;
            this.OptOut = optOut;
            this.GroupId = groupId;
            this.VerifyEmailAddresses = verifyEmailAddresses;
        }

        /// <summary>
        /// Gets or Sets FirstName
        /// </summary>
        [DataMember(Name = "firstName", EmitDefaultValue = true)]
        public string FirstName { get; set; }

        /// <summary>
        /// Gets or Sets LastName
        /// </summary>
        [DataMember(Name = "lastName", EmitDefaultValue = true)]
        public string LastName { get; set; }

        /// <summary>
        /// Gets or Sets Company
        /// </summary>
        [DataMember(Name = "company", EmitDefaultValue = true)]
        public string Company { get; set; }

        /// <summary>
        /// Set of email addresses belonging to the contact
        /// </summary>
        /// <value>Set of email addresses belonging to the contact</value>
        [DataMember(Name = "emailAddresses", EmitDefaultValue = true)]
        public List<string> EmailAddresses { get; set; }

        /// <summary>
        /// Tags that can be used to search and group contacts
        /// </summary>
        /// <value>Tags that can be used to search and group contacts</value>
        [DataMember(Name = "tags", EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Gets or Sets MetaData
        /// </summary>
        [DataMember(Name = "metaData", EmitDefaultValue = true)]
        public Object MetaData { get; set; }

        /// <summary>
        /// Has the user explicitly or implicitly opted out of being contacted? If so MailSlurp will ignore them in all actions.
        /// </summary>
        /// <value>Has the user explicitly or implicitly opted out of being contacted? If so MailSlurp will ignore them in all actions.</value>
        [DataMember(Name = "optOut", EmitDefaultValue = true)]
        public bool? OptOut { get; set; }

        /// <summary>
        /// Group IDs that contact belongs to
        /// </summary>
        /// <value>Group IDs that contact belongs to</value>
        [DataMember(Name = "groupId", EmitDefaultValue = true)]
        public Guid? GroupId { get; set; }

        /// <summary>
        /// Whether to validate contact email address exists
        /// </summary>
        /// <value>Whether to validate contact email address exists</value>
        [DataMember(Name = "verifyEmailAddresses", EmitDefaultValue = true)]
        public bool? VerifyEmailAddresses { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateContactOptions {\n");
            sb.Append("  FirstName: ").Append(FirstName).Append("\n");
            sb.Append("  LastName: ").Append(LastName).Append("\n");
            sb.Append("  Company: ").Append(Company).Append("\n");
            sb.Append("  EmailAddresses: ").Append(EmailAddresses).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  MetaData: ").Append(MetaData).Append("\n");
            sb.Append("  OptOut: ").Append(OptOut).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("  VerifyEmailAddresses: ").Append(VerifyEmailAddresses).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateContactOptions);
        }

        /// <summary>
        /// Returns true if CreateContactOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateContactOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateContactOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.FirstName == input.FirstName ||
                    (this.FirstName != null &&
                    this.FirstName.Equals(input.FirstName))
                ) && 
                (
                    this.LastName == input.LastName ||
                    (this.LastName != null &&
                    this.LastName.Equals(input.LastName))
                ) && 
                (
                    this.Company == input.Company ||
                    (this.Company != null &&
                    this.Company.Equals(input.Company))
                ) && 
                (
                    this.EmailAddresses == input.EmailAddresses ||
                    this.EmailAddresses != null &&
                    input.EmailAddresses != null &&
                    this.EmailAddresses.SequenceEqual(input.EmailAddresses)
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.MetaData == input.MetaData ||
                    (this.MetaData != null &&
                    this.MetaData.Equals(input.MetaData))
                ) && 
                (
                    this.OptOut == input.OptOut ||
                    (this.OptOut != null &&
                    this.OptOut.Equals(input.OptOut))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                ) && 
                (
                    this.VerifyEmailAddresses == input.VerifyEmailAddresses ||
                    (this.VerifyEmailAddresses != null &&
                    this.VerifyEmailAddresses.Equals(input.VerifyEmailAddresses))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.FirstName != null)
                {
                    hashCode = (hashCode * 59) + this.FirstName.GetHashCode();
                }
                if (this.LastName != null)
                {
                    hashCode = (hashCode * 59) + this.LastName.GetHashCode();
                }
                if (this.Company != null)
                {
                    hashCode = (hashCode * 59) + this.Company.GetHashCode();
                }
                if (this.EmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddresses.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                if (this.MetaData != null)
                {
                    hashCode = (hashCode * 59) + this.MetaData.GetHashCode();
                }
                if (this.OptOut != null)
                {
                    hashCode = (hashCode * 59) + this.OptOut.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                if (this.VerifyEmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.VerifyEmailAddresses.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateConnectorSmtpConnectionOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CreateConnectorSmtpConnectionOptions
    /// </summary>
    [DataContract(Name = "CreateConnectorSmtpConnectionOptions")]
    public partial class CreateConnectorSmtpConnectionOptions : IEquatable<CreateConnectorSmtpConnectionOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateConnectorSmtpConnectionOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateConnectorSmtpConnectionOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateConnectorSmtpConnectionOptions" /> class.
        /// </summary>
        /// <param name="enabled">enabled.</param>
        /// <param name="smtpHost">smtpHost (required).</param>
        /// <param name="smtpPort">smtpPort.</param>
        /// <param name="smtpSsl">smtpSsl.</param>
        /// <param name="smtpUsername">smtpUsername.</param>
        /// <param name="smtpPassword">smtpPassword.</param>
        public CreateConnectorSmtpConnectionOptions(bool enabled = default(bool), string smtpHost = default(string), int smtpPort = default(int), bool smtpSsl = default(bool), string smtpUsername = default(string), string smtpPassword = default(string))
        {
            // to ensure "smtpHost" is required (not null)
            if (smtpHost == null)
            {
                throw new ArgumentNullException("smtpHost is a required property for CreateConnectorSmtpConnectionOptions and cannot be null");
            }
            this.SmtpHost = smtpHost;
            this.Enabled = enabled;
            this.SmtpPort = smtpPort;
            this.SmtpSsl = smtpSsl;
            this.SmtpUsername = smtpUsername;
            this.SmtpPassword = smtpPassword;
        }

        /// <summary>
        /// Gets or Sets Enabled
        /// </summary>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool Enabled { get; set; }

        /// <summary>
        /// Gets or Sets SmtpHost
        /// </summary>
        [DataMember(Name = "smtpHost", IsRequired = true, EmitDefaultValue = true)]
        public string SmtpHost { get; set; }

        /// <summary>
        /// Gets or Sets SmtpPort
        /// </summary>
        [DataMember(Name = "smtpPort", EmitDefaultValue = false)]
        public int SmtpPort { get; set; }

        /// <summary>
        /// Gets or Sets SmtpSsl
        /// </summary>
        [DataMember(Name = "smtpSsl", EmitDefaultValue = true)]
        public bool SmtpSsl { get; set; }

        /// <summary>
        /// Gets or Sets SmtpUsername
        /// </summary>
        [DataMember(Name = "smtpUsername", EmitDefaultValue = false)]
        public string SmtpUsername { get; set; }

        /// <summary>
        /// Gets or Sets SmtpPassword
        /// </summary>
        [DataMember(Name = "smtpPassword", EmitDefaultValue = false)]
        public string SmtpPassword { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateConnectorSmtpConnectionOptions {\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  SmtpHost: ").Append(SmtpHost).Append("\n");
            sb.Append("  SmtpPort: ").Append(SmtpPort).Append("\n");
            sb.Append("  SmtpSsl: ").Append(SmtpSsl).Append("\n");
            sb.Append("  SmtpUsername: ").Append(SmtpUsername).Append("\n");
            sb.Append("  SmtpPassword: ").Append(SmtpPassword).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateConnectorSmtpConnectionOptions);
        }

        /// <summary>
        /// Returns true if CreateConnectorSmtpConnectionOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateConnectorSmtpConnectionOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateConnectorSmtpConnectionOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Enabled == input.Enabled ||
                    this.Enabled.Equals(input.Enabled)
                ) && 
                (
                    this.SmtpHost == input.SmtpHost ||
                    (this.SmtpHost != null &&
                    this.SmtpHost.Equals(input.SmtpHost))
                ) && 
                (
                    this.SmtpPort == input.SmtpPort ||
                    this.SmtpPort.Equals(input.SmtpPort)
                ) && 
                (
                    this.SmtpSsl == input.SmtpSsl ||
                    this.SmtpSsl.Equals(input.SmtpSsl)
                ) && 
                (
                    this.SmtpUsername == input.SmtpUsername ||
                    (this.SmtpUsername != null &&
                    this.SmtpUsername.Equals(input.SmtpUsername))
                ) && 
                (
                    this.SmtpPassword == input.SmtpPassword ||
                    (this.SmtpPassword != null &&
                    this.SmtpPassword.Equals(input.SmtpPassword))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                if (this.SmtpHost != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpPort.GetHashCode();
                hashCode = (hashCode * 59) + this.SmtpSsl.GetHashCode();
                if (this.SmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpUsername.GetHashCode();
                }
                if (this.SmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpPassword.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateConnectorOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for creating an inbox connection with an external mail provider
    /// </summary>
    [DataContract(Name = "CreateConnectorOptions")]
    public partial class CreateConnectorOptions : IEquatable<CreateConnectorOptions>, IValidatableObject
    {
        /// <summary>
        /// Sync schedule type
        /// </summary>
        /// <value>Sync schedule type</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SyncScheduleTypeEnum
        {
            /// <summary>
            /// Enum INTERVAL for value: INTERVAL
            /// </summary>
            [EnumMember(Value = "INTERVAL")]
            INTERVAL = 1

        }


        /// <summary>
        /// Sync schedule type
        /// </summary>
        /// <value>Sync schedule type</value>
        [DataMember(Name = "syncScheduleType", EmitDefaultValue = true)]
        public SyncScheduleTypeEnum? SyncScheduleType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateConnectorOptions" /> class.
        /// </summary>
        /// <param name="syncEnabled">Enable automatic background sync.</param>
        /// <param name="syncScheduleType">Sync schedule type.</param>
        /// <param name="syncInterval">Sync interval in minutes.</param>
        /// <param name="name">Name of connector.</param>
        /// <param name="emailAddress">Email address of external inbox.</param>
        /// <param name="enabled">Is connector enabled.</param>
        public CreateConnectorOptions(bool? syncEnabled = default(bool?), SyncScheduleTypeEnum? syncScheduleType = default(SyncScheduleTypeEnum?), int? syncInterval = default(int?), string name = default(string), string emailAddress = default(string), bool? enabled = default(bool?))
        {
            this.SyncEnabled = syncEnabled;
            this.SyncScheduleType = syncScheduleType;
            this.SyncInterval = syncInterval;
            this.Name = name;
            this.EmailAddress = emailAddress;
            this.Enabled = enabled;
        }

        /// <summary>
        /// Enable automatic background sync
        /// </summary>
        /// <value>Enable automatic background sync</value>
        [DataMember(Name = "syncEnabled", EmitDefaultValue = true)]
        public bool? SyncEnabled { get; set; }

        /// <summary>
        /// Sync interval in minutes
        /// </summary>
        /// <value>Sync interval in minutes</value>
        [DataMember(Name = "syncInterval", EmitDefaultValue = true)]
        public int? SyncInterval { get; set; }

        /// <summary>
        /// Name of connector
        /// </summary>
        /// <value>Name of connector</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Email address of external inbox
        /// </summary>
        /// <value>Email address of external inbox</value>
        [DataMember(Name = "emailAddress", EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Is connector enabled
        /// </summary>
        /// <value>Is connector enabled</value>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool? Enabled { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateConnectorOptions {\n");
            sb.Append("  SyncEnabled: ").Append(SyncEnabled).Append("\n");
            sb.Append("  SyncScheduleType: ").Append(SyncScheduleType).Append("\n");
            sb.Append("  SyncInterval: ").Append(SyncInterval).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateConnectorOptions);
        }

        /// <summary>
        /// Returns true if CreateConnectorOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateConnectorOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateConnectorOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SyncEnabled == input.SyncEnabled ||
                    (this.SyncEnabled != null &&
                    this.SyncEnabled.Equals(input.SyncEnabled))
                ) && 
                (
                    this.SyncScheduleType == input.SyncScheduleType ||
                    this.SyncScheduleType.Equals(input.SyncScheduleType)
                ) && 
                (
                    this.SyncInterval == input.SyncInterval ||
                    (this.SyncInterval != null &&
                    this.SyncInterval.Equals(input.SyncInterval))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    (this.Enabled != null &&
                    this.Enabled.Equals(input.Enabled))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SyncEnabled != null)
                {
                    hashCode = (hashCode * 59) + this.SyncEnabled.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SyncScheduleType.GetHashCode();
                if (this.SyncInterval != null)
                {
                    hashCode = (hashCode * 59) + this.SyncInterval.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.Enabled != null)
                {
                    hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateConnectorImapConnectionOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for IMAP connection to external email inbox. Allows syncing emails iva IMAP.
    /// </summary>
    [DataContract(Name = "CreateConnectorImapConnectionOptions")]
    public partial class CreateConnectorImapConnectionOptions : IEquatable<CreateConnectorImapConnectionOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateConnectorImapConnectionOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateConnectorImapConnectionOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateConnectorImapConnectionOptions" /> class.
        /// </summary>
        /// <param name="imapSsl">imapSsl.</param>
        /// <param name="imapUsername">imapUsername.</param>
        /// <param name="imapPassword">imapPassword.</param>
        /// <param name="selectFolder">Optional folder to select during IMAP connection.</param>
        /// <param name="searchTerms">searchTerms.</param>
        /// <param name="imapPort">IMAP server port.</param>
        /// <param name="imapHost">IMAP server host (required).</param>
        /// <param name="enabled">IMAP server enabled.</param>
        public CreateConnectorImapConnectionOptions(bool? imapSsl = default(bool?), string imapUsername = default(string), string imapPassword = default(string), string selectFolder = default(string), string searchTerms = default(string), int? imapPort = default(int?), string imapHost = default(string), bool? enabled = default(bool?))
        {
            // to ensure "imapHost" is required (not null)
            if (imapHost == null)
            {
                throw new ArgumentNullException("imapHost is a required property for CreateConnectorImapConnectionOptions and cannot be null");
            }
            this.ImapHost = imapHost;
            this.ImapSsl = imapSsl;
            this.ImapUsername = imapUsername;
            this.ImapPassword = imapPassword;
            this.SelectFolder = selectFolder;
            this.SearchTerms = searchTerms;
            this.ImapPort = imapPort;
            this.Enabled = enabled;
        }

        /// <summary>
        /// Gets or Sets ImapSsl
        /// </summary>
        [DataMember(Name = "imapSsl", EmitDefaultValue = true)]
        public bool? ImapSsl { get; set; }

        /// <summary>
        /// Gets or Sets ImapUsername
        /// </summary>
        [DataMember(Name = "imapUsername", EmitDefaultValue = true)]
        public string ImapUsername { get; set; }

        /// <summary>
        /// Gets or Sets ImapPassword
        /// </summary>
        [DataMember(Name = "imapPassword", EmitDefaultValue = true)]
        public string ImapPassword { get; set; }

        /// <summary>
        /// Optional folder to select during IMAP connection
        /// </summary>
        /// <value>Optional folder to select during IMAP connection</value>
        [DataMember(Name = "selectFolder", EmitDefaultValue = true)]
        public string SelectFolder { get; set; }

        /// <summary>
        /// Gets or Sets SearchTerms
        /// </summary>
        [DataMember(Name = "searchTerms", EmitDefaultValue = true)]
        public string SearchTerms { get; set; }

        /// <summary>
        /// IMAP server port
        /// </summary>
        /// <value>IMAP server port</value>
        [DataMember(Name = "imapPort", EmitDefaultValue = true)]
        public int? ImapPort { get; set; }

        /// <summary>
        /// IMAP server host
        /// </summary>
        /// <value>IMAP server host</value>
        [DataMember(Name = "imapHost", IsRequired = true, EmitDefaultValue = true)]
        public string ImapHost { get; set; }

        /// <summary>
        /// IMAP server enabled
        /// </summary>
        /// <value>IMAP server enabled</value>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool? Enabled { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateConnectorImapConnectionOptions {\n");
            sb.Append("  ImapSsl: ").Append(ImapSsl).Append("\n");
            sb.Append("  ImapUsername: ").Append(ImapUsername).Append("\n");
            sb.Append("  ImapPassword: ").Append(ImapPassword).Append("\n");
            sb.Append("  SelectFolder: ").Append(SelectFolder).Append("\n");
            sb.Append("  SearchTerms: ").Append(SearchTerms).Append("\n");
            sb.Append("  ImapPort: ").Append(ImapPort).Append("\n");
            sb.Append("  ImapHost: ").Append(ImapHost).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateConnectorImapConnectionOptions);
        }

        /// <summary>
        /// Returns true if CreateConnectorImapConnectionOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateConnectorImapConnectionOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateConnectorImapConnectionOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ImapSsl == input.ImapSsl ||
                    (this.ImapSsl != null &&
                    this.ImapSsl.Equals(input.ImapSsl))
                ) && 
                (
                    this.ImapUsername == input.ImapUsername ||
                    (this.ImapUsername != null &&
                    this.ImapUsername.Equals(input.ImapUsername))
                ) && 
                (
                    this.ImapPassword == input.ImapPassword ||
                    (this.ImapPassword != null &&
                    this.ImapPassword.Equals(input.ImapPassword))
                ) && 
                (
                    this.SelectFolder == input.SelectFolder ||
                    (this.SelectFolder != null &&
                    this.SelectFolder.Equals(input.SelectFolder))
                ) && 
                (
                    this.SearchTerms == input.SearchTerms ||
                    (this.SearchTerms != null &&
                    this.SearchTerms.Equals(input.SearchTerms))
                ) && 
                (
                    this.ImapPort == input.ImapPort ||
                    (this.ImapPort != null &&
                    this.ImapPort.Equals(input.ImapPort))
                ) && 
                (
                    this.ImapHost == input.ImapHost ||
                    (this.ImapHost != null &&
                    this.ImapHost.Equals(input.ImapHost))
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    (this.Enabled != null &&
                    this.Enabled.Equals(input.Enabled))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ImapSsl != null)
                {
                    hashCode = (hashCode * 59) + this.ImapSsl.GetHashCode();
                }
                if (this.ImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.ImapUsername.GetHashCode();
                }
                if (this.ImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPassword.GetHashCode();
                }
                if (this.SelectFolder != null)
                {
                    hashCode = (hashCode * 59) + this.SelectFolder.GetHashCode();
                }
                if (this.SearchTerms != null)
                {
                    hashCode = (hashCode * 59) + this.SearchTerms.GetHashCode();
                }
                if (this.ImapPort != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPort.GetHashCode();
                }
                if (this.ImapHost != null)
                {
                    hashCode = (hashCode * 59) + this.ImapHost.GetHashCode();
                }
                if (this.Enabled != null)
                {
                    hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CreateAliasOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Create email alias options. Email aliases can be used to mask real email addresses behind an ID. You can also attach an inbox to an alias so that any email received by the inbox email address if forwarded to the alias email address.
    /// </summary>
    [DataContract(Name = "CreateAliasOptions")]
    public partial class CreateAliasOptions : IEquatable<CreateAliasOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateAliasOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateAliasOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateAliasOptions" /> class.
        /// </summary>
        /// <param name="emailAddress">Email address to be hidden behind alias. Emails sent to the alias email address will be forwarded to this address. If you want to enable replies set useThreads true and the reply-to for the email will allow outbound communication via a thread. Some email addresses may require verification if they are not added as a contact first. (required).</param>
        /// <param name="inboxId">Optional inbox ID to attach to alias. Null by default means an a new inbox will be created for the alias. Use a custom inbox to control what email address the alias uses. To use custom email addresses create a domain and an inbox, the use the inbox ID with this call. Emails received by this inbox will be forwarded to the alias email address.</param>
        /// <param name="name">Optional name for alias.</param>
        /// <param name="useThreads">Enable threads options. If true emails will be sent with a unique reply-to thread address. This means you can reply to the forwarded email and it will be sent to the recipients via your alias address. That way a thread conversation is preserved. (required).</param>
        /// <param name="domainId">Custom domain ID to use when generating alias email addresses.</param>
        /// <param name="verifyEmailAddress">Whether to verify the masked email address exists before sending an email to it.</param>
        public CreateAliasOptions(string emailAddress = default(string), Guid? inboxId = default(Guid?), string name = default(string), bool useThreads = default(bool), Guid? domainId = default(Guid?), bool? verifyEmailAddress = default(bool?))
        {
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for CreateAliasOptions and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.UseThreads = useThreads;
            this.InboxId = inboxId;
            this.Name = name;
            this.DomainId = domainId;
            this.VerifyEmailAddress = verifyEmailAddress;
        }

        /// <summary>
        /// Email address to be hidden behind alias. Emails sent to the alias email address will be forwarded to this address. If you want to enable replies set useThreads true and the reply-to for the email will allow outbound communication via a thread. Some email addresses may require verification if they are not added as a contact first.
        /// </summary>
        /// <value>Email address to be hidden behind alias. Emails sent to the alias email address will be forwarded to this address. If you want to enable replies set useThreads true and the reply-to for the email will allow outbound communication via a thread. Some email addresses may require verification if they are not added as a contact first.</value>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Optional inbox ID to attach to alias. Null by default means an a new inbox will be created for the alias. Use a custom inbox to control what email address the alias uses. To use custom email addresses create a domain and an inbox, the use the inbox ID with this call. Emails received by this inbox will be forwarded to the alias email address
        /// </summary>
        /// <value>Optional inbox ID to attach to alias. Null by default means an a new inbox will be created for the alias. Use a custom inbox to control what email address the alias uses. To use custom email addresses create a domain and an inbox, the use the inbox ID with this call. Emails received by this inbox will be forwarded to the alias email address</value>
        [DataMember(Name = "inboxId", EmitDefaultValue = true)]
        public Guid? InboxId { get; set; }

        /// <summary>
        /// Optional name for alias
        /// </summary>
        /// <value>Optional name for alias</value>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Enable threads options. If true emails will be sent with a unique reply-to thread address. This means you can reply to the forwarded email and it will be sent to the recipients via your alias address. That way a thread conversation is preserved.
        /// </summary>
        /// <value>Enable threads options. If true emails will be sent with a unique reply-to thread address. This means you can reply to the forwarded email and it will be sent to the recipients via your alias address. That way a thread conversation is preserved.</value>
        [DataMember(Name = "useThreads", IsRequired = true, EmitDefaultValue = true)]
        public bool UseThreads { get; set; }

        /// <summary>
        /// Custom domain ID to use when generating alias email addresses
        /// </summary>
        /// <value>Custom domain ID to use when generating alias email addresses</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Whether to verify the masked email address exists before sending an email to it
        /// </summary>
        /// <value>Whether to verify the masked email address exists before sending an email to it</value>
        [DataMember(Name = "verifyEmailAddress", EmitDefaultValue = true)]
        public bool? VerifyEmailAddress { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateAliasOptions {\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  UseThreads: ").Append(UseThreads).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  VerifyEmailAddress: ").Append(VerifyEmailAddress).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CreateAliasOptions);
        }

        /// <summary>
        /// Returns true if CreateAliasOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CreateAliasOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CreateAliasOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.UseThreads == input.UseThreads ||
                    this.UseThreads.Equals(input.UseThreads)
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.VerifyEmailAddress == input.VerifyEmailAddress ||
                    (this.VerifyEmailAddress != null &&
                    this.VerifyEmailAddress.Equals(input.VerifyEmailAddress))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.UseThreads.GetHashCode();
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.VerifyEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.VerifyEmailAddress.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CountDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Number of elements
    /// </summary>
    [DataContract(Name = "CountDto")]
    public partial class CountDto : IEquatable<CountDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CountDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CountDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CountDto" /> class.
        /// </summary>
        /// <param name="totalElements">totalElements (required).</param>
        public CountDto(long totalElements = default(long))
        {
            this.TotalElements = totalElements;
        }

        /// <summary>
        /// Gets or Sets TotalElements
        /// </summary>
        [DataMember(Name = "totalElements", IsRequired = true, EmitDefaultValue = true)]
        public long TotalElements { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CountDto {\n");
            sb.Append("  TotalElements: ").Append(TotalElements).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CountDto);
        }

        /// <summary>
        /// Returns true if CountDto instances are equal
        /// </summary>
        /// <param name="input">Instance of CountDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CountDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.TotalElements == input.TotalElements ||
                    this.TotalElements.Equals(input.TotalElements)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.TotalElements.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ContentMatchOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for matching content using regex patterns based on Java Pattern syntax
    /// </summary>
    [DataContract(Name = "ContentMatchOptions")]
    public partial class ContentMatchOptions : IEquatable<ContentMatchOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ContentMatchOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ContentMatchOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ContentMatchOptions" /> class.
        /// </summary>
        /// <param name="pattern">Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. (required).</param>
        public ContentMatchOptions(string pattern = default(string))
        {
            // to ensure "pattern" is required (not null)
            if (pattern == null)
            {
                throw new ArgumentNullException("pattern is a required property for ContentMatchOptions and cannot be null");
            }
            this.Pattern = pattern;
        }

        /// <summary>
        /// Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns.
        /// </summary>
        /// <value>Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns.</value>
        [DataMember(Name = "pattern", IsRequired = true, EmitDefaultValue = true)]
        public string Pattern { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ContentMatchOptions {\n");
            sb.Append("  Pattern: ").Append(Pattern).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ContentMatchOptions);
        }

        /// <summary>
        /// Returns true if ContentMatchOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of ContentMatchOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ContentMatchOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Pattern == input.Pattern ||
                    (this.Pattern != null &&
                    this.Pattern.Equals(input.Pattern))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Pattern != null)
                {
                    hashCode = (hashCode * 59) + this.Pattern.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ContactProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email contact for address book
    /// </summary>
    [DataContract(Name = "ContactProjection")]
    public partial class ContactProjection : IEquatable<ContactProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ContactProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ContactProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ContactProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="emailAddress">emailAddress.</param>
        /// <param name="emailAddresses">emailAddresses.</param>
        /// <param name="firstName">firstName.</param>
        /// <param name="lastName">lastName.</param>
        /// <param name="company">company.</param>
        /// <param name="optOut">optOut.</param>
        /// <param name="id">id (required).</param>
        /// <param name="groupId">groupId.</param>
        public ContactProjection(DateTime createdAt = default(DateTime), string emailAddress = default(string), List<string> emailAddresses = default(List<string>), string firstName = default(string), string lastName = default(string), string company = default(string), bool? optOut = default(bool?), Guid id = default(Guid), Guid? groupId = default(Guid?))
        {
            this.CreatedAt = createdAt;
            this.Id = id;
            this.EmailAddress = emailAddress;
            this.EmailAddresses = emailAddresses;
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Company = company;
            this.OptOut = optOut;
            this.GroupId = groupId;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddresses
        /// </summary>
        [DataMember(Name = "emailAddresses", EmitDefaultValue = true)]
        public List<string> EmailAddresses { get; set; }

        /// <summary>
        /// Gets or Sets FirstName
        /// </summary>
        [DataMember(Name = "firstName", EmitDefaultValue = true)]
        public string FirstName { get; set; }

        /// <summary>
        /// Gets or Sets LastName
        /// </summary>
        [DataMember(Name = "lastName", EmitDefaultValue = true)]
        public string LastName { get; set; }

        /// <summary>
        /// Gets or Sets Company
        /// </summary>
        [DataMember(Name = "company", EmitDefaultValue = true)]
        public string Company { get; set; }

        /// <summary>
        /// Gets or Sets OptOut
        /// </summary>
        [DataMember(Name = "optOut", EmitDefaultValue = true)]
        public bool? OptOut { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets GroupId
        /// </summary>
        [DataMember(Name = "groupId", EmitDefaultValue = true)]
        public Guid? GroupId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ContactProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  EmailAddresses: ").Append(EmailAddresses).Append("\n");
            sb.Append("  FirstName: ").Append(FirstName).Append("\n");
            sb.Append("  LastName: ").Append(LastName).Append("\n");
            sb.Append("  Company: ").Append(Company).Append("\n");
            sb.Append("  OptOut: ").Append(OptOut).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ContactProjection);
        }

        /// <summary>
        /// Returns true if ContactProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ContactProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ContactProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.EmailAddresses == input.EmailAddresses ||
                    this.EmailAddresses != null &&
                    input.EmailAddresses != null &&
                    this.EmailAddresses.SequenceEqual(input.EmailAddresses)
                ) && 
                (
                    this.FirstName == input.FirstName ||
                    (this.FirstName != null &&
                    this.FirstName.Equals(input.FirstName))
                ) && 
                (
                    this.LastName == input.LastName ||
                    (this.LastName != null &&
                    this.LastName.Equals(input.LastName))
                ) && 
                (
                    this.Company == input.Company ||
                    (this.Company != null &&
                    this.Company.Equals(input.Company))
                ) && 
                (
                    this.OptOut == input.OptOut ||
                    (this.OptOut != null &&
                    this.OptOut.Equals(input.OptOut))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.EmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddresses.GetHashCode();
                }
                if (this.FirstName != null)
                {
                    hashCode = (hashCode * 59) + this.FirstName.GetHashCode();
                }
                if (this.LastName != null)
                {
                    hashCode = (hashCode * 59) + this.LastName.GetHashCode();
                }
                if (this.Company != null)
                {
                    hashCode = (hashCode * 59) + this.Company.GetHashCode();
                }
                if (this.OptOut != null)
                {
                    hashCode = (hashCode * 59) + this.OptOut.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ContactDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Contact object. For saving a user in contact book.
    /// </summary>
    [DataContract(Name = "ContactDto")]
    public partial class ContactDto : IEquatable<ContactDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ContactDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ContactDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ContactDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="groupId">groupId.</param>
        /// <param name="firstName">firstName.</param>
        /// <param name="lastName">lastName.</param>
        /// <param name="company">company.</param>
        /// <param name="emailAddresses">emailAddresses (required).</param>
        /// <param name="primaryEmailAddress">primaryEmailAddress.</param>
        /// <param name="tags">tags (required).</param>
        /// <param name="metaData">metaData.</param>
        /// <param name="optOut">optOut.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public ContactDto(Guid id = default(Guid), Guid? groupId = default(Guid?), string firstName = default(string), string lastName = default(string), string company = default(string), List<string> emailAddresses = default(List<string>), string primaryEmailAddress = default(string), List<string> tags = default(List<string>), Object metaData = default(Object), bool? optOut = default(bool?), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "emailAddresses" is required (not null)
            if (emailAddresses == null)
            {
                throw new ArgumentNullException("emailAddresses is a required property for ContactDto and cannot be null");
            }
            this.EmailAddresses = emailAddresses;
            // to ensure "tags" is required (not null)
            if (tags == null)
            {
                throw new ArgumentNullException("tags is a required property for ContactDto and cannot be null");
            }
            this.Tags = tags;
            this.CreatedAt = createdAt;
            this.GroupId = groupId;
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Company = company;
            this.PrimaryEmailAddress = primaryEmailAddress;
            this.MetaData = metaData;
            this.OptOut = optOut;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets GroupId
        /// </summary>
        [DataMember(Name = "groupId", EmitDefaultValue = true)]
        public Guid? GroupId { get; set; }

        /// <summary>
        /// Gets or Sets FirstName
        /// </summary>
        [DataMember(Name = "firstName", EmitDefaultValue = true)]
        public string FirstName { get; set; }

        /// <summary>
        /// Gets or Sets LastName
        /// </summary>
        [DataMember(Name = "lastName", EmitDefaultValue = true)]
        public string LastName { get; set; }

        /// <summary>
        /// Gets or Sets Company
        /// </summary>
        [DataMember(Name = "company", EmitDefaultValue = true)]
        public string Company { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddresses
        /// </summary>
        [DataMember(Name = "emailAddresses", IsRequired = true, EmitDefaultValue = true)]
        public List<string> EmailAddresses { get; set; }

        /// <summary>
        /// Gets or Sets PrimaryEmailAddress
        /// </summary>
        [DataMember(Name = "primaryEmailAddress", EmitDefaultValue = true)]
        public string PrimaryEmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets Tags
        /// </summary>
        [DataMember(Name = "tags", IsRequired = true, EmitDefaultValue = true)]
        public List<string> Tags { get; set; }

        /// <summary>
        /// Gets or Sets MetaData
        /// </summary>
        [DataMember(Name = "metaData", EmitDefaultValue = true)]
        public Object MetaData { get; set; }

        /// <summary>
        /// Gets or Sets OptOut
        /// </summary>
        [DataMember(Name = "optOut", EmitDefaultValue = true)]
        public bool? OptOut { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ContactDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  GroupId: ").Append(GroupId).Append("\n");
            sb.Append("  FirstName: ").Append(FirstName).Append("\n");
            sb.Append("  LastName: ").Append(LastName).Append("\n");
            sb.Append("  Company: ").Append(Company).Append("\n");
            sb.Append("  EmailAddresses: ").Append(EmailAddresses).Append("\n");
            sb.Append("  PrimaryEmailAddress: ").Append(PrimaryEmailAddress).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  MetaData: ").Append(MetaData).Append("\n");
            sb.Append("  OptOut: ").Append(OptOut).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ContactDto);
        }

        /// <summary>
        /// Returns true if ContactDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ContactDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ContactDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.GroupId == input.GroupId ||
                    (this.GroupId != null &&
                    this.GroupId.Equals(input.GroupId))
                ) && 
                (
                    this.FirstName == input.FirstName ||
                    (this.FirstName != null &&
                    this.FirstName.Equals(input.FirstName))
                ) && 
                (
                    this.LastName == input.LastName ||
                    (this.LastName != null &&
                    this.LastName.Equals(input.LastName))
                ) && 
                (
                    this.Company == input.Company ||
                    (this.Company != null &&
                    this.Company.Equals(input.Company))
                ) && 
                (
                    this.EmailAddresses == input.EmailAddresses ||
                    this.EmailAddresses != null &&
                    input.EmailAddresses != null &&
                    this.EmailAddresses.SequenceEqual(input.EmailAddresses)
                ) && 
                (
                    this.PrimaryEmailAddress == input.PrimaryEmailAddress ||
                    (this.PrimaryEmailAddress != null &&
                    this.PrimaryEmailAddress.Equals(input.PrimaryEmailAddress))
                ) && 
                (
                    this.Tags == input.Tags ||
                    this.Tags != null &&
                    input.Tags != null &&
                    this.Tags.SequenceEqual(input.Tags)
                ) && 
                (
                    this.MetaData == input.MetaData ||
                    (this.MetaData != null &&
                    this.MetaData.Equals(input.MetaData))
                ) && 
                (
                    this.OptOut == input.OptOut ||
                    (this.OptOut != null &&
                    this.OptOut.Equals(input.OptOut))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.GroupId != null)
                {
                    hashCode = (hashCode * 59) + this.GroupId.GetHashCode();
                }
                if (this.FirstName != null)
                {
                    hashCode = (hashCode * 59) + this.FirstName.GetHashCode();
                }
                if (this.LastName != null)
                {
                    hashCode = (hashCode * 59) + this.LastName.GetHashCode();
                }
                if (this.Company != null)
                {
                    hashCode = (hashCode * 59) + this.Company.GetHashCode();
                }
                if (this.EmailAddresses != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddresses.GetHashCode();
                }
                if (this.PrimaryEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.PrimaryEmailAddress.GetHashCode();
                }
                if (this.Tags != null)
                {
                    hashCode = (hashCode * 59) + this.Tags.GetHashCode();
                }
                if (this.MetaData != null)
                {
                    hashCode = (hashCode * 59) + this.MetaData.GetHashCode();
                }
                if (this.OptOut != null)
                {
                    hashCode = (hashCode * 59) + this.OptOut.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncResult
    /// </summary>
    [DataContract(Name = "ConnectorSyncResult")]
    public partial class ConnectorSyncResult : IEquatable<ConnectorSyncResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorSyncResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncResult" /> class.
        /// </summary>
        /// <param name="emailSyncCount">emailSyncCount (required).</param>
        /// <param name="logLines">logLines.</param>
        public ConnectorSyncResult(int emailSyncCount = default(int), List<string> logLines = default(List<string>))
        {
            this.EmailSyncCount = emailSyncCount;
            this.LogLines = logLines;
        }

        /// <summary>
        /// Gets or Sets EmailSyncCount
        /// </summary>
        [DataMember(Name = "emailSyncCount", IsRequired = true, EmitDefaultValue = true)]
        public int EmailSyncCount { get; set; }

        /// <summary>
        /// Gets or Sets LogLines
        /// </summary>
        [DataMember(Name = "logLines", EmitDefaultValue = false)]
        public List<string> LogLines { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncResult {\n");
            sb.Append("  EmailSyncCount: ").Append(EmailSyncCount).Append("\n");
            sb.Append("  LogLines: ").Append(LogLines).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncResult);
        }

        /// <summary>
        /// Returns true if ConnectorSyncResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailSyncCount == input.EmailSyncCount ||
                    this.EmailSyncCount.Equals(input.EmailSyncCount)
                ) && 
                (
                    this.LogLines == input.LogLines ||
                    this.LogLines != null &&
                    input.LogLines != null &&
                    this.LogLines.SequenceEqual(input.LogLines)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.EmailSyncCount.GetHashCode();
                if (this.LogLines != null)
                {
                    hashCode = (hashCode * 59) + this.LogLines.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncRequestResultExceptionCauseStackTraceInner.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncRequestResultExceptionCauseStackTraceInner
    /// </summary>
    [DataContract(Name = "ConnectorSyncRequestResult_exception_cause_stackTrace_inner")]
    public partial class ConnectorSyncRequestResultExceptionCauseStackTraceInner : IEquatable<ConnectorSyncRequestResultExceptionCauseStackTraceInner>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncRequestResultExceptionCauseStackTraceInner" /> class.
        /// </summary>
        /// <param name="classLoaderName">classLoaderName.</param>
        /// <param name="moduleName">moduleName.</param>
        /// <param name="moduleVersion">moduleVersion.</param>
        /// <param name="methodName">methodName.</param>
        /// <param name="fileName">fileName.</param>
        /// <param name="lineNumber">lineNumber.</param>
        /// <param name="className">className.</param>
        /// <param name="nativeMethod">nativeMethod.</param>
        public ConnectorSyncRequestResultExceptionCauseStackTraceInner(string classLoaderName = default(string), string moduleName = default(string), string moduleVersion = default(string), string methodName = default(string), string fileName = default(string), int lineNumber = default(int), string className = default(string), bool nativeMethod = default(bool))
        {
            this.ClassLoaderName = classLoaderName;
            this.ModuleName = moduleName;
            this.ModuleVersion = moduleVersion;
            this.MethodName = methodName;
            this.FileName = fileName;
            this.LineNumber = lineNumber;
            this.ClassName = className;
            this.NativeMethod = nativeMethod;
        }

        /// <summary>
        /// Gets or Sets ClassLoaderName
        /// </summary>
        [DataMember(Name = "classLoaderName", EmitDefaultValue = false)]
        public string ClassLoaderName { get; set; }

        /// <summary>
        /// Gets or Sets ModuleName
        /// </summary>
        [DataMember(Name = "moduleName", EmitDefaultValue = false)]
        public string ModuleName { get; set; }

        /// <summary>
        /// Gets or Sets ModuleVersion
        /// </summary>
        [DataMember(Name = "moduleVersion", EmitDefaultValue = false)]
        public string ModuleVersion { get; set; }

        /// <summary>
        /// Gets or Sets MethodName
        /// </summary>
        [DataMember(Name = "methodName", EmitDefaultValue = false)]
        public string MethodName { get; set; }

        /// <summary>
        /// Gets or Sets FileName
        /// </summary>
        [DataMember(Name = "fileName", EmitDefaultValue = false)]
        public string FileName { get; set; }

        /// <summary>
        /// Gets or Sets LineNumber
        /// </summary>
        [DataMember(Name = "lineNumber", EmitDefaultValue = false)]
        public int LineNumber { get; set; }

        /// <summary>
        /// Gets or Sets ClassName
        /// </summary>
        [DataMember(Name = "className", EmitDefaultValue = false)]
        public string ClassName { get; set; }

        /// <summary>
        /// Gets or Sets NativeMethod
        /// </summary>
        [DataMember(Name = "nativeMethod", EmitDefaultValue = true)]
        public bool NativeMethod { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncRequestResultExceptionCauseStackTraceInner {\n");
            sb.Append("  ClassLoaderName: ").Append(ClassLoaderName).Append("\n");
            sb.Append("  ModuleName: ").Append(ModuleName).Append("\n");
            sb.Append("  ModuleVersion: ").Append(ModuleVersion).Append("\n");
            sb.Append("  MethodName: ").Append(MethodName).Append("\n");
            sb.Append("  FileName: ").Append(FileName).Append("\n");
            sb.Append("  LineNumber: ").Append(LineNumber).Append("\n");
            sb.Append("  ClassName: ").Append(ClassName).Append("\n");
            sb.Append("  NativeMethod: ").Append(NativeMethod).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncRequestResultExceptionCauseStackTraceInner);
        }

        /// <summary>
        /// Returns true if ConnectorSyncRequestResultExceptionCauseStackTraceInner instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncRequestResultExceptionCauseStackTraceInner to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncRequestResultExceptionCauseStackTraceInner input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ClassLoaderName == input.ClassLoaderName ||
                    (this.ClassLoaderName != null &&
                    this.ClassLoaderName.Equals(input.ClassLoaderName))
                ) && 
                (
                    this.ModuleName == input.ModuleName ||
                    (this.ModuleName != null &&
                    this.ModuleName.Equals(input.ModuleName))
                ) && 
                (
                    this.ModuleVersion == input.ModuleVersion ||
                    (this.ModuleVersion != null &&
                    this.ModuleVersion.Equals(input.ModuleVersion))
                ) && 
                (
                    this.MethodName == input.MethodName ||
                    (this.MethodName != null &&
                    this.MethodName.Equals(input.MethodName))
                ) && 
                (
                    this.FileName == input.FileName ||
                    (this.FileName != null &&
                    this.FileName.Equals(input.FileName))
                ) && 
                (
                    this.LineNumber == input.LineNumber ||
                    this.LineNumber.Equals(input.LineNumber)
                ) && 
                (
                    this.ClassName == input.ClassName ||
                    (this.ClassName != null &&
                    this.ClassName.Equals(input.ClassName))
                ) && 
                (
                    this.NativeMethod == input.NativeMethod ||
                    this.NativeMethod.Equals(input.NativeMethod)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ClassLoaderName != null)
                {
                    hashCode = (hashCode * 59) + this.ClassLoaderName.GetHashCode();
                }
                if (this.ModuleName != null)
                {
                    hashCode = (hashCode * 59) + this.ModuleName.GetHashCode();
                }
                if (this.ModuleVersion != null)
                {
                    hashCode = (hashCode * 59) + this.ModuleVersion.GetHashCode();
                }
                if (this.MethodName != null)
                {
                    hashCode = (hashCode * 59) + this.MethodName.GetHashCode();
                }
                if (this.FileName != null)
                {
                    hashCode = (hashCode * 59) + this.FileName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.LineNumber.GetHashCode();
                if (this.ClassName != null)
                {
                    hashCode = (hashCode * 59) + this.ClassName.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.NativeMethod.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncRequestResultExceptionCause.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncRequestResultExceptionCause
    /// </summary>
    [DataContract(Name = "ConnectorSyncRequestResult_exception_cause")]
    public partial class ConnectorSyncRequestResultExceptionCause : IEquatable<ConnectorSyncRequestResultExceptionCause>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncRequestResultExceptionCause" /> class.
        /// </summary>
        /// <param name="stackTrace">stackTrace.</param>
        /// <param name="message">message.</param>
        /// <param name="localizedMessage">localizedMessage.</param>
        public ConnectorSyncRequestResultExceptionCause(List<ConnectorSyncRequestResultExceptionCauseStackTraceInner> stackTrace = default(List<ConnectorSyncRequestResultExceptionCauseStackTraceInner>), string message = default(string), string localizedMessage = default(string))
        {
            this.StackTrace = stackTrace;
            this.Message = message;
            this.LocalizedMessage = localizedMessage;
        }

        /// <summary>
        /// Gets or Sets StackTrace
        /// </summary>
        [DataMember(Name = "stackTrace", EmitDefaultValue = false)]
        public List<ConnectorSyncRequestResultExceptionCauseStackTraceInner> StackTrace { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets LocalizedMessage
        /// </summary>
        [DataMember(Name = "localizedMessage", EmitDefaultValue = false)]
        public string LocalizedMessage { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncRequestResultExceptionCause {\n");
            sb.Append("  StackTrace: ").Append(StackTrace).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  LocalizedMessage: ").Append(LocalizedMessage).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncRequestResultExceptionCause);
        }

        /// <summary>
        /// Returns true if ConnectorSyncRequestResultExceptionCause instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncRequestResultExceptionCause to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncRequestResultExceptionCause input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.StackTrace == input.StackTrace ||
                    this.StackTrace != null &&
                    input.StackTrace != null &&
                    this.StackTrace.SequenceEqual(input.StackTrace)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.LocalizedMessage == input.LocalizedMessage ||
                    (this.LocalizedMessage != null &&
                    this.LocalizedMessage.Equals(input.LocalizedMessage))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.StackTrace != null)
                {
                    hashCode = (hashCode * 59) + this.StackTrace.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.LocalizedMessage != null)
                {
                    hashCode = (hashCode * 59) + this.LocalizedMessage.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncRequestResultException.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncRequestResultException
    /// </summary>
    [DataContract(Name = "ConnectorSyncRequestResult_exception")]
    public partial class ConnectorSyncRequestResultException : IEquatable<ConnectorSyncRequestResultException>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncRequestResultException" /> class.
        /// </summary>
        /// <param name="cause">cause.</param>
        /// <param name="stackTrace">stackTrace.</param>
        /// <param name="message">message.</param>
        /// <param name="suppressed">suppressed.</param>
        /// <param name="localizedMessage">localizedMessage.</param>
        public ConnectorSyncRequestResultException(ConnectorSyncRequestResultExceptionCause cause = default(ConnectorSyncRequestResultExceptionCause), List<ConnectorSyncRequestResultExceptionCauseStackTraceInner> stackTrace = default(List<ConnectorSyncRequestResultExceptionCauseStackTraceInner>), string message = default(string), List<ConnectorSyncRequestResultExceptionCause> suppressed = default(List<ConnectorSyncRequestResultExceptionCause>), string localizedMessage = default(string))
        {
            this.Cause = cause;
            this.StackTrace = stackTrace;
            this.Message = message;
            this.Suppressed = suppressed;
            this.LocalizedMessage = localizedMessage;
        }

        /// <summary>
        /// Gets or Sets Cause
        /// </summary>
        [DataMember(Name = "cause", EmitDefaultValue = false)]
        public ConnectorSyncRequestResultExceptionCause Cause { get; set; }

        /// <summary>
        /// Gets or Sets StackTrace
        /// </summary>
        [DataMember(Name = "stackTrace", EmitDefaultValue = false)]
        public List<ConnectorSyncRequestResultExceptionCauseStackTraceInner> StackTrace { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Suppressed
        /// </summary>
        [DataMember(Name = "suppressed", EmitDefaultValue = false)]
        public List<ConnectorSyncRequestResultExceptionCause> Suppressed { get; set; }

        /// <summary>
        /// Gets or Sets LocalizedMessage
        /// </summary>
        [DataMember(Name = "localizedMessage", EmitDefaultValue = false)]
        public string LocalizedMessage { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncRequestResultException {\n");
            sb.Append("  Cause: ").Append(Cause).Append("\n");
            sb.Append("  StackTrace: ").Append(StackTrace).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Suppressed: ").Append(Suppressed).Append("\n");
            sb.Append("  LocalizedMessage: ").Append(LocalizedMessage).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncRequestResultException);
        }

        /// <summary>
        /// Returns true if ConnectorSyncRequestResultException instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncRequestResultException to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncRequestResultException input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Cause == input.Cause ||
                    (this.Cause != null &&
                    this.Cause.Equals(input.Cause))
                ) && 
                (
                    this.StackTrace == input.StackTrace ||
                    this.StackTrace != null &&
                    input.StackTrace != null &&
                    this.StackTrace.SequenceEqual(input.StackTrace)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Suppressed == input.Suppressed ||
                    this.Suppressed != null &&
                    input.Suppressed != null &&
                    this.Suppressed.SequenceEqual(input.Suppressed)
                ) && 
                (
                    this.LocalizedMessage == input.LocalizedMessage ||
                    (this.LocalizedMessage != null &&
                    this.LocalizedMessage.Equals(input.LocalizedMessage))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Cause != null)
                {
                    hashCode = (hashCode * 59) + this.Cause.GetHashCode();
                }
                if (this.StackTrace != null)
                {
                    hashCode = (hashCode * 59) + this.StackTrace.GetHashCode();
                }
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.Suppressed != null)
                {
                    hashCode = (hashCode * 59) + this.Suppressed.GetHashCode();
                }
                if (this.LocalizedMessage != null)
                {
                    hashCode = (hashCode * 59) + this.LocalizedMessage.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncRequestResult.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncRequestResult
    /// </summary>
    [DataContract(Name = "ConnectorSyncRequestResult")]
    public partial class ConnectorSyncRequestResult : IEquatable<ConnectorSyncRequestResult>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncRequestResult" /> class.
        /// </summary>
        /// <param name="syncResult">syncResult.</param>
        /// <param name="exception">exception.</param>
        /// <param name="eventId">eventId.</param>
        public ConnectorSyncRequestResult(ConnectorSyncResult syncResult = default(ConnectorSyncResult), ConnectorSyncRequestResultException exception = default(ConnectorSyncRequestResultException), Guid eventId = default(Guid))
        {
            this.SyncResult = syncResult;
            this.Exception = exception;
            this.EventId = eventId;
        }

        /// <summary>
        /// Gets or Sets SyncResult
        /// </summary>
        [DataMember(Name = "syncResult", EmitDefaultValue = false)]
        public ConnectorSyncResult SyncResult { get; set; }

        /// <summary>
        /// Gets or Sets Exception
        /// </summary>
        [DataMember(Name = "exception", EmitDefaultValue = false)]
        public ConnectorSyncRequestResultException Exception { get; set; }

        /// <summary>
        /// Gets or Sets EventId
        /// </summary>
        [DataMember(Name = "eventId", EmitDefaultValue = false)]
        public Guid EventId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncRequestResult {\n");
            sb.Append("  SyncResult: ").Append(SyncResult).Append("\n");
            sb.Append("  Exception: ").Append(Exception).Append("\n");
            sb.Append("  EventId: ").Append(EventId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncRequestResult);
        }

        /// <summary>
        /// Returns true if ConnectorSyncRequestResult instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncRequestResult to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncRequestResult input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.SyncResult == input.SyncResult ||
                    (this.SyncResult != null &&
                    this.SyncResult.Equals(input.SyncResult))
                ) && 
                (
                    this.Exception == input.Exception ||
                    (this.Exception != null &&
                    this.Exception.Equals(input.Exception))
                ) && 
                (
                    this.EventId == input.EventId ||
                    (this.EventId != null &&
                    this.EventId.Equals(input.EventId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.SyncResult != null)
                {
                    hashCode = (hashCode * 59) + this.SyncResult.GetHashCode();
                }
                if (this.Exception != null)
                {
                    hashCode = (hashCode * 59) + this.Exception.GetHashCode();
                }
                if (this.EventId != null)
                {
                    hashCode = (hashCode * 59) + this.EventId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncEventProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncEventProjection
    /// </summary>
    [DataContract(Name = "ConnectorSyncEventProjection")]
    public partial class ConnectorSyncEventProjection : IEquatable<ConnectorSyncEventProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines SyncStatus
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SyncStatusEnum
        {
            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 1,

            /// <summary>
            /// Enum INTERNALERROR for value: INTERNAL_ERROR
            /// </summary>
            [EnumMember(Value = "INTERNAL_ERROR")]
            INTERNALERROR = 2,

            /// <summary>
            /// Enum SUBSCRIPTIONERROR for value: SUBSCRIPTION_ERROR
            /// </summary>
            [EnumMember(Value = "SUBSCRIPTION_ERROR")]
            SUBSCRIPTIONERROR = 3,

            /// <summary>
            /// Enum CONNECTIONERROR for value: CONNECTION_ERROR
            /// </summary>
            [EnumMember(Value = "CONNECTION_ERROR")]
            CONNECTIONERROR = 4,

            /// <summary>
            /// Enum NOTFOUND for value: NOT_FOUND
            /// </summary>
            [EnumMember(Value = "NOT_FOUND")]
            NOTFOUND = 5

        }


        /// <summary>
        /// Gets or Sets SyncStatus
        /// </summary>
        [DataMember(Name = "syncStatus", IsRequired = true, EmitDefaultValue = true)]
        public SyncStatusEnum SyncStatus { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncEventProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorSyncEventProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncEventProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="connectorId">connectorId (required).</param>
        /// <param name="syncCount">syncCount (required).</param>
        /// <param name="syncStatus">syncStatus (required).</param>
        /// <param name="message">message.</param>
        /// <param name="id">id.</param>
        public ConnectorSyncEventProjection(DateTime createdAt = default(DateTime), Guid connectorId = default(Guid), long syncCount = default(long), SyncStatusEnum syncStatus = default(SyncStatusEnum), string message = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.ConnectorId = connectorId;
            this.SyncCount = syncCount;
            this.SyncStatus = syncStatus;
            this.Message = message;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets ConnectorId
        /// </summary>
        [DataMember(Name = "connectorId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ConnectorId { get; set; }

        /// <summary>
        /// Gets or Sets SyncCount
        /// </summary>
        [DataMember(Name = "syncCount", IsRequired = true, EmitDefaultValue = true)]
        public long SyncCount { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncEventProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  ConnectorId: ").Append(ConnectorId).Append("\n");
            sb.Append("  SyncCount: ").Append(SyncCount).Append("\n");
            sb.Append("  SyncStatus: ").Append(SyncStatus).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncEventProjection);
        }

        /// <summary>
        /// Returns true if ConnectorSyncEventProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncEventProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncEventProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.ConnectorId == input.ConnectorId ||
                    (this.ConnectorId != null &&
                    this.ConnectorId.Equals(input.ConnectorId))
                ) && 
                (
                    this.SyncCount == input.SyncCount ||
                    this.SyncCount.Equals(input.SyncCount)
                ) && 
                (
                    this.SyncStatus == input.SyncStatus ||
                    this.SyncStatus.Equals(input.SyncStatus)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.ConnectorId != null)
                {
                    hashCode = (hashCode * 59) + this.ConnectorId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SyncCount.GetHashCode();
                hashCode = (hashCode * 59) + this.SyncStatus.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSyncEventDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSyncEventDto
    /// </summary>
    [DataContract(Name = "ConnectorSyncEventDto")]
    public partial class ConnectorSyncEventDto : IEquatable<ConnectorSyncEventDto>, IValidatableObject
    {
        /// <summary>
        /// Defines SyncStatus
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SyncStatusEnum
        {
            /// <summary>
            /// Enum SUCCESS for value: SUCCESS
            /// </summary>
            [EnumMember(Value = "SUCCESS")]
            SUCCESS = 1,

            /// <summary>
            /// Enum INTERNALERROR for value: INTERNAL_ERROR
            /// </summary>
            [EnumMember(Value = "INTERNAL_ERROR")]
            INTERNALERROR = 2,

            /// <summary>
            /// Enum SUBSCRIPTIONERROR for value: SUBSCRIPTION_ERROR
            /// </summary>
            [EnumMember(Value = "SUBSCRIPTION_ERROR")]
            SUBSCRIPTIONERROR = 3,

            /// <summary>
            /// Enum CONNECTIONERROR for value: CONNECTION_ERROR
            /// </summary>
            [EnumMember(Value = "CONNECTION_ERROR")]
            CONNECTIONERROR = 4,

            /// <summary>
            /// Enum NOTFOUND for value: NOT_FOUND
            /// </summary>
            [EnumMember(Value = "NOT_FOUND")]
            NOTFOUND = 5

        }


        /// <summary>
        /// Gets or Sets SyncStatus
        /// </summary>
        [DataMember(Name = "syncStatus", IsRequired = true, EmitDefaultValue = true)]
        public SyncStatusEnum SyncStatus { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncEventDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorSyncEventDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSyncEventDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="connectorId">connectorId (required).</param>
        /// <param name="syncStatus">syncStatus (required).</param>
        /// <param name="syncCount">syncCount (required).</param>
        /// <param name="message">message.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public ConnectorSyncEventDto(Guid id = default(Guid), Guid connectorId = default(Guid), SyncStatusEnum syncStatus = default(SyncStatusEnum), long syncCount = default(long), string message = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.ConnectorId = connectorId;
            this.SyncStatus = syncStatus;
            this.SyncCount = syncCount;
            this.CreatedAt = createdAt;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets ConnectorId
        /// </summary>
        [DataMember(Name = "connectorId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ConnectorId { get; set; }

        /// <summary>
        /// Gets or Sets SyncCount
        /// </summary>
        [DataMember(Name = "syncCount", IsRequired = true, EmitDefaultValue = true)]
        public long SyncCount { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSyncEventDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  ConnectorId: ").Append(ConnectorId).Append("\n");
            sb.Append("  SyncStatus: ").Append(SyncStatus).Append("\n");
            sb.Append("  SyncCount: ").Append(SyncCount).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSyncEventDto);
        }

        /// <summary>
        /// Returns true if ConnectorSyncEventDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSyncEventDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSyncEventDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.ConnectorId == input.ConnectorId ||
                    (this.ConnectorId != null &&
                    this.ConnectorId.Equals(input.ConnectorId))
                ) && 
                (
                    this.SyncStatus == input.SyncStatus ||
                    this.SyncStatus.Equals(input.SyncStatus)
                ) && 
                (
                    this.SyncCount == input.SyncCount ||
                    this.SyncCount.Equals(input.SyncCount)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.ConnectorId != null)
                {
                    hashCode = (hashCode * 59) + this.ConnectorId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SyncStatus.GetHashCode();
                hashCode = (hashCode * 59) + this.SyncCount.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorSmtpConnectionDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorSmtpConnectionDto
    /// </summary>
    [DataContract(Name = "ConnectorSmtpConnectionDto")]
    public partial class ConnectorSmtpConnectionDto : IEquatable<ConnectorSmtpConnectionDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSmtpConnectionDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorSmtpConnectionDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorSmtpConnectionDto" /> class.
        /// </summary>
        /// <param name="connectorId">connectorId (required).</param>
        /// <param name="smtpHost">smtpHost.</param>
        /// <param name="smtpPort">smtpPort.</param>
        /// <param name="smtpUsername">smtpUsername.</param>
        /// <param name="smtpPassword">smtpPassword.</param>
        /// <param name="smtpSsl">smtpSsl.</param>
        /// <param name="enabled">enabled.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="id">id (required).</param>
        public ConnectorSmtpConnectionDto(Guid connectorId = default(Guid), string smtpHost = default(string), int smtpPort = default(int), string smtpUsername = default(string), string smtpPassword = default(string), bool smtpSsl = default(bool), bool enabled = default(bool), DateTime createdAt = default(DateTime), Guid id = default(Guid))
        {
            this.ConnectorId = connectorId;
            this.CreatedAt = createdAt;
            this.Id = id;
            this.SmtpHost = smtpHost;
            this.SmtpPort = smtpPort;
            this.SmtpUsername = smtpUsername;
            this.SmtpPassword = smtpPassword;
            this.SmtpSsl = smtpSsl;
            this.Enabled = enabled;
        }

        /// <summary>
        /// Gets or Sets ConnectorId
        /// </summary>
        [DataMember(Name = "connectorId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ConnectorId { get; set; }

        /// <summary>
        /// Gets or Sets SmtpHost
        /// </summary>
        [DataMember(Name = "smtpHost", EmitDefaultValue = false)]
        public string SmtpHost { get; set; }

        /// <summary>
        /// Gets or Sets SmtpPort
        /// </summary>
        [DataMember(Name = "smtpPort", EmitDefaultValue = false)]
        public int SmtpPort { get; set; }

        /// <summary>
        /// Gets or Sets SmtpUsername
        /// </summary>
        [DataMember(Name = "smtpUsername", EmitDefaultValue = false)]
        public string SmtpUsername { get; set; }

        /// <summary>
        /// Gets or Sets SmtpPassword
        /// </summary>
        [DataMember(Name = "smtpPassword", EmitDefaultValue = false)]
        public string SmtpPassword { get; set; }

        /// <summary>
        /// Gets or Sets SmtpSsl
        /// </summary>
        [DataMember(Name = "smtpSsl", EmitDefaultValue = true)]
        public bool SmtpSsl { get; set; }

        /// <summary>
        /// Gets or Sets Enabled
        /// </summary>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool Enabled { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorSmtpConnectionDto {\n");
            sb.Append("  ConnectorId: ").Append(ConnectorId).Append("\n");
            sb.Append("  SmtpHost: ").Append(SmtpHost).Append("\n");
            sb.Append("  SmtpPort: ").Append(SmtpPort).Append("\n");
            sb.Append("  SmtpUsername: ").Append(SmtpUsername).Append("\n");
            sb.Append("  SmtpPassword: ").Append(SmtpPassword).Append("\n");
            sb.Append("  SmtpSsl: ").Append(SmtpSsl).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorSmtpConnectionDto);
        }

        /// <summary>
        /// Returns true if ConnectorSmtpConnectionDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorSmtpConnectionDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorSmtpConnectionDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ConnectorId == input.ConnectorId ||
                    (this.ConnectorId != null &&
                    this.ConnectorId.Equals(input.ConnectorId))
                ) && 
                (
                    this.SmtpHost == input.SmtpHost ||
                    (this.SmtpHost != null &&
                    this.SmtpHost.Equals(input.SmtpHost))
                ) && 
                (
                    this.SmtpPort == input.SmtpPort ||
                    this.SmtpPort.Equals(input.SmtpPort)
                ) && 
                (
                    this.SmtpUsername == input.SmtpUsername ||
                    (this.SmtpUsername != null &&
                    this.SmtpUsername.Equals(input.SmtpUsername))
                ) && 
                (
                    this.SmtpPassword == input.SmtpPassword ||
                    (this.SmtpPassword != null &&
                    this.SmtpPassword.Equals(input.SmtpPassword))
                ) && 
                (
                    this.SmtpSsl == input.SmtpSsl ||
                    this.SmtpSsl.Equals(input.SmtpSsl)
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    this.Enabled.Equals(input.Enabled)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ConnectorId != null)
                {
                    hashCode = (hashCode * 59) + this.ConnectorId.GetHashCode();
                }
                if (this.SmtpHost != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpPort.GetHashCode();
                if (this.SmtpUsername != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpUsername.GetHashCode();
                }
                if (this.SmtpPassword != null)
                {
                    hashCode = (hashCode * 59) + this.SmtpPassword.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SmtpSsl.GetHashCode();
                hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Connector
    /// </summary>
    [DataContract(Name = "ConnectorProjection")]
    public partial class ConnectorProjection : IEquatable<ConnectorProjection>, IValidatableObject
    {
        /// <summary>
        /// Defines SyncScheduleType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SyncScheduleTypeEnum
        {
            /// <summary>
            /// Enum INTERVAL for value: INTERVAL
            /// </summary>
            [EnumMember(Value = "INTERVAL")]
            INTERVAL = 1

        }


        /// <summary>
        /// Gets or Sets SyncScheduleType
        /// </summary>
        [DataMember(Name = "syncScheduleType", IsRequired = true, EmitDefaultValue = true)]
        public SyncScheduleTypeEnum SyncScheduleType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="enabled">enabled.</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="emailAddress">emailAddress.</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="syncEnabled">syncEnabled.</param>
        /// <param name="syncScheduleType">syncScheduleType (required).</param>
        /// <param name="syncInterval">syncInterval.</param>
        /// <param name="name">name.</param>
        /// <param name="id">id.</param>
        public ConnectorProjection(DateTime createdAt = default(DateTime), bool enabled = default(bool), Guid inboxId = default(Guid), string emailAddress = default(string), Guid userId = default(Guid), bool syncEnabled = default(bool), SyncScheduleTypeEnum syncScheduleType = default(SyncScheduleTypeEnum), int syncInterval = default(int), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.InboxId = inboxId;
            this.UserId = userId;
            this.SyncScheduleType = syncScheduleType;
            this.Enabled = enabled;
            this.EmailAddress = emailAddress;
            this.SyncEnabled = syncEnabled;
            this.SyncInterval = syncInterval;
            this.Name = name;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Enabled
        /// </summary>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool Enabled { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", EmitDefaultValue = false)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets SyncEnabled
        /// </summary>
        [DataMember(Name = "syncEnabled", EmitDefaultValue = true)]
        public bool SyncEnabled { get; set; }

        /// <summary>
        /// Gets or Sets SyncInterval
        /// </summary>
        [DataMember(Name = "syncInterval", EmitDefaultValue = false)]
        public int SyncInterval { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SyncEnabled: ").Append(SyncEnabled).Append("\n");
            sb.Append("  SyncScheduleType: ").Append(SyncScheduleType).Append("\n");
            sb.Append("  SyncInterval: ").Append(SyncInterval).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorProjection);
        }

        /// <summary>
        /// Returns true if ConnectorProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    this.Enabled.Equals(input.Enabled)
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SyncEnabled == input.SyncEnabled ||
                    this.SyncEnabled.Equals(input.SyncEnabled)
                ) && 
                (
                    this.SyncScheduleType == input.SyncScheduleType ||
                    this.SyncScheduleType.Equals(input.SyncScheduleType)
                ) && 
                (
                    this.SyncInterval == input.SyncInterval ||
                    this.SyncInterval.Equals(input.SyncInterval)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SyncEnabled.GetHashCode();
                hashCode = (hashCode * 59) + this.SyncScheduleType.GetHashCode();
                hashCode = (hashCode * 59) + this.SyncInterval.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorImapConnectionDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorImapConnectionDto
    /// </summary>
    [DataContract(Name = "ConnectorImapConnectionDto")]
    public partial class ConnectorImapConnectionDto : IEquatable<ConnectorImapConnectionDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorImapConnectionDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorImapConnectionDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorImapConnectionDto" /> class.
        /// </summary>
        /// <param name="connectorId">connectorId (required).</param>
        /// <param name="imapHost">imapHost.</param>
        /// <param name="imapPort">imapPort.</param>
        /// <param name="imapUsername">imapUsername.</param>
        /// <param name="imapPassword">imapPassword.</param>
        /// <param name="imapSsl">imapSsl.</param>
        /// <param name="selectFolder">selectFolder.</param>
        /// <param name="searchTerms">searchTerms.</param>
        /// <param name="enabled">enabled.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="id">id (required).</param>
        public ConnectorImapConnectionDto(Guid connectorId = default(Guid), string imapHost = default(string), int imapPort = default(int), string imapUsername = default(string), string imapPassword = default(string), bool imapSsl = default(bool), string selectFolder = default(string), string searchTerms = default(string), bool enabled = default(bool), DateTime createdAt = default(DateTime), Guid id = default(Guid))
        {
            this.ConnectorId = connectorId;
            this.CreatedAt = createdAt;
            this.Id = id;
            this.ImapHost = imapHost;
            this.ImapPort = imapPort;
            this.ImapUsername = imapUsername;
            this.ImapPassword = imapPassword;
            this.ImapSsl = imapSsl;
            this.SelectFolder = selectFolder;
            this.SearchTerms = searchTerms;
            this.Enabled = enabled;
        }

        /// <summary>
        /// Gets or Sets ConnectorId
        /// </summary>
        [DataMember(Name = "connectorId", IsRequired = true, EmitDefaultValue = true)]
        public Guid ConnectorId { get; set; }

        /// <summary>
        /// Gets or Sets ImapHost
        /// </summary>
        [DataMember(Name = "imapHost", EmitDefaultValue = false)]
        public string ImapHost { get; set; }

        /// <summary>
        /// Gets or Sets ImapPort
        /// </summary>
        [DataMember(Name = "imapPort", EmitDefaultValue = false)]
        public int ImapPort { get; set; }

        /// <summary>
        /// Gets or Sets ImapUsername
        /// </summary>
        [DataMember(Name = "imapUsername", EmitDefaultValue = false)]
        public string ImapUsername { get; set; }

        /// <summary>
        /// Gets or Sets ImapPassword
        /// </summary>
        [DataMember(Name = "imapPassword", EmitDefaultValue = false)]
        public string ImapPassword { get; set; }

        /// <summary>
        /// Gets or Sets ImapSsl
        /// </summary>
        [DataMember(Name = "imapSsl", EmitDefaultValue = true)]
        public bool ImapSsl { get; set; }

        /// <summary>
        /// Gets or Sets SelectFolder
        /// </summary>
        [DataMember(Name = "selectFolder", EmitDefaultValue = false)]
        public string SelectFolder { get; set; }

        /// <summary>
        /// Gets or Sets SearchTerms
        /// </summary>
        [DataMember(Name = "searchTerms", EmitDefaultValue = false)]
        public string SearchTerms { get; set; }

        /// <summary>
        /// Gets or Sets Enabled
        /// </summary>
        [DataMember(Name = "enabled", EmitDefaultValue = true)]
        public bool Enabled { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorImapConnectionDto {\n");
            sb.Append("  ConnectorId: ").Append(ConnectorId).Append("\n");
            sb.Append("  ImapHost: ").Append(ImapHost).Append("\n");
            sb.Append("  ImapPort: ").Append(ImapPort).Append("\n");
            sb.Append("  ImapUsername: ").Append(ImapUsername).Append("\n");
            sb.Append("  ImapPassword: ").Append(ImapPassword).Append("\n");
            sb.Append("  ImapSsl: ").Append(ImapSsl).Append("\n");
            sb.Append("  SelectFolder: ").Append(SelectFolder).Append("\n");
            sb.Append("  SearchTerms: ").Append(SearchTerms).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorImapConnectionDto);
        }

        /// <summary>
        /// Returns true if ConnectorImapConnectionDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorImapConnectionDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorImapConnectionDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.ConnectorId == input.ConnectorId ||
                    (this.ConnectorId != null &&
                    this.ConnectorId.Equals(input.ConnectorId))
                ) && 
                (
                    this.ImapHost == input.ImapHost ||
                    (this.ImapHost != null &&
                    this.ImapHost.Equals(input.ImapHost))
                ) && 
                (
                    this.ImapPort == input.ImapPort ||
                    this.ImapPort.Equals(input.ImapPort)
                ) && 
                (
                    this.ImapUsername == input.ImapUsername ||
                    (this.ImapUsername != null &&
                    this.ImapUsername.Equals(input.ImapUsername))
                ) && 
                (
                    this.ImapPassword == input.ImapPassword ||
                    (this.ImapPassword != null &&
                    this.ImapPassword.Equals(input.ImapPassword))
                ) && 
                (
                    this.ImapSsl == input.ImapSsl ||
                    this.ImapSsl.Equals(input.ImapSsl)
                ) && 
                (
                    this.SelectFolder == input.SelectFolder ||
                    (this.SelectFolder != null &&
                    this.SelectFolder.Equals(input.SelectFolder))
                ) && 
                (
                    this.SearchTerms == input.SearchTerms ||
                    (this.SearchTerms != null &&
                    this.SearchTerms.Equals(input.SearchTerms))
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    this.Enabled.Equals(input.Enabled)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.ConnectorId != null)
                {
                    hashCode = (hashCode * 59) + this.ConnectorId.GetHashCode();
                }
                if (this.ImapHost != null)
                {
                    hashCode = (hashCode * 59) + this.ImapHost.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ImapPort.GetHashCode();
                if (this.ImapUsername != null)
                {
                    hashCode = (hashCode * 59) + this.ImapUsername.GetHashCode();
                }
                if (this.ImapPassword != null)
                {
                    hashCode = (hashCode * 59) + this.ImapPassword.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ImapSsl.GetHashCode();
                if (this.SelectFolder != null)
                {
                    hashCode = (hashCode * 59) + this.SelectFolder.GetHashCode();
                }
                if (this.SearchTerms != null)
                {
                    hashCode = (hashCode * 59) + this.SearchTerms.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConnectorDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// ConnectorDto
    /// </summary>
    [DataContract(Name = "ConnectorDto")]
    public partial class ConnectorDto : IEquatable<ConnectorDto>, IValidatableObject
    {
        /// <summary>
        /// Defines SyncScheduleType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SyncScheduleTypeEnum
        {
            /// <summary>
            /// Enum INTERVAL for value: INTERVAL
            /// </summary>
            [EnumMember(Value = "INTERVAL")]
            INTERVAL = 1

        }


        /// <summary>
        /// Gets or Sets SyncScheduleType
        /// </summary>
        [DataMember(Name = "syncScheduleType", EmitDefaultValue = true)]
        public SyncScheduleTypeEnum? SyncScheduleType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConnectorDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="name">name.</param>
        /// <param name="enabled">enabled (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="syncEnabled">syncEnabled (required).</param>
        /// <param name="syncScheduleType">syncScheduleType.</param>
        /// <param name="syncInterval">syncInterval.</param>
        /// <param name="hasImapConnection">hasImapConnection (required).</param>
        /// <param name="hasSmtpConnection">hasSmtpConnection (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        public ConnectorDto(Guid id = default(Guid), string name = default(string), bool enabled = default(bool), Guid userId = default(Guid), Guid inboxId = default(Guid), bool syncEnabled = default(bool), SyncScheduleTypeEnum? syncScheduleType = default(SyncScheduleTypeEnum?), int? syncInterval = default(int?), bool hasImapConnection = default(bool), bool hasSmtpConnection = default(bool), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.Enabled = enabled;
            this.UserId = userId;
            this.InboxId = inboxId;
            this.SyncEnabled = syncEnabled;
            this.HasImapConnection = hasImapConnection;
            this.HasSmtpConnection = hasSmtpConnection;
            this.CreatedAt = createdAt;
            this.Name = name;
            this.SyncScheduleType = syncScheduleType;
            this.SyncInterval = syncInterval;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Enabled
        /// </summary>
        [DataMember(Name = "enabled", IsRequired = true, EmitDefaultValue = true)]
        public bool Enabled { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets SyncEnabled
        /// </summary>
        [DataMember(Name = "syncEnabled", IsRequired = true, EmitDefaultValue = true)]
        public bool SyncEnabled { get; set; }

        /// <summary>
        /// Gets or Sets SyncInterval
        /// </summary>
        [DataMember(Name = "syncInterval", EmitDefaultValue = true)]
        public int? SyncInterval { get; set; }

        /// <summary>
        /// Gets or Sets HasImapConnection
        /// </summary>
        [DataMember(Name = "hasImapConnection", IsRequired = true, EmitDefaultValue = true)]
        public bool HasImapConnection { get; set; }

        /// <summary>
        /// Gets or Sets HasSmtpConnection
        /// </summary>
        [DataMember(Name = "hasSmtpConnection", IsRequired = true, EmitDefaultValue = true)]
        public bool HasSmtpConnection { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConnectorDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  SyncEnabled: ").Append(SyncEnabled).Append("\n");
            sb.Append("  SyncScheduleType: ").Append(SyncScheduleType).Append("\n");
            sb.Append("  SyncInterval: ").Append(SyncInterval).Append("\n");
            sb.Append("  HasImapConnection: ").Append(HasImapConnection).Append("\n");
            sb.Append("  HasSmtpConnection: ").Append(HasSmtpConnection).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConnectorDto);
        }

        /// <summary>
        /// Returns true if ConnectorDto instances are equal
        /// </summary>
        /// <param name="input">Instance of ConnectorDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConnectorDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Enabled == input.Enabled ||
                    this.Enabled.Equals(input.Enabled)
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.SyncEnabled == input.SyncEnabled ||
                    this.SyncEnabled.Equals(input.SyncEnabled)
                ) && 
                (
                    this.SyncScheduleType == input.SyncScheduleType ||
                    this.SyncScheduleType.Equals(input.SyncScheduleType)
                ) && 
                (
                    this.SyncInterval == input.SyncInterval ||
                    (this.SyncInterval != null &&
                    this.SyncInterval.Equals(input.SyncInterval))
                ) && 
                (
                    this.HasImapConnection == input.HasImapConnection ||
                    this.HasImapConnection.Equals(input.HasImapConnection)
                ) && 
                (
                    this.HasSmtpConnection == input.HasSmtpConnection ||
                    this.HasSmtpConnection.Equals(input.HasSmtpConnection)
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.Enabled.GetHashCode();
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.SyncEnabled.GetHashCode();
                hashCode = (hashCode * 59) + this.SyncScheduleType.GetHashCode();
                if (this.SyncInterval != null)
                {
                    hashCode = (hashCode * 59) + this.SyncInterval.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.HasImapConnection.GetHashCode();
                hashCode = (hashCode * 59) + this.HasSmtpConnection.GetHashCode();
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/ConditionOption.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for matching emails in an inbox based on a condition such as &#x60;HAS_ATTACHMENTS&#x3D;TRUE&#x60;
    /// </summary>
    [DataContract(Name = "ConditionOption")]
    public partial class ConditionOption : IEquatable<ConditionOption>, IValidatableObject
    {
        /// <summary>
        /// Condition of an email object that can be used to filter results
        /// </summary>
        /// <value>Condition of an email object that can be used to filter results</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ConditionEnum
        {
            /// <summary>
            /// Enum HASATTACHMENTS for value: HAS_ATTACHMENTS
            /// </summary>
            [EnumMember(Value = "HAS_ATTACHMENTS")]
            HASATTACHMENTS = 1

        }


        /// <summary>
        /// Condition of an email object that can be used to filter results
        /// </summary>
        /// <value>Condition of an email object that can be used to filter results</value>
        [DataMember(Name = "condition", IsRequired = true, EmitDefaultValue = true)]
        public ConditionEnum Condition { get; set; }
        /// <summary>
        /// Expected condition value
        /// </summary>
        /// <value>Expected condition value</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ValueEnum
        {
            /// <summary>
            /// Enum TRUE for value: TRUE
            /// </summary>
            [EnumMember(Value = "TRUE")]
            TRUE = 1,

            /// <summary>
            /// Enum FALSE for value: FALSE
            /// </summary>
            [EnumMember(Value = "FALSE")]
            FALSE = 2

        }


        /// <summary>
        /// Expected condition value
        /// </summary>
        /// <value>Expected condition value</value>
        [DataMember(Name = "value", IsRequired = true, EmitDefaultValue = true)]
        public ValueEnum Value { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionOption" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ConditionOption() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionOption" /> class.
        /// </summary>
        /// <param name="condition">Condition of an email object that can be used to filter results (required).</param>
        /// <param name="value">Expected condition value (required).</param>
        public ConditionOption(ConditionEnum condition = default(ConditionEnum), ValueEnum value = default(ValueEnum))
        {
            this.Condition = condition;
            this.Value = value;
        }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class ConditionOption {\n");
            sb.Append("  Condition: ").Append(Condition).Append("\n");
            sb.Append("  Value: ").Append(Value).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ConditionOption);
        }

        /// <summary>
        /// Returns true if ConditionOption instances are equal
        /// </summary>
        /// <param name="input">Instance of ConditionOption to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ConditionOption input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Condition == input.Condition ||
                    this.Condition.Equals(input.Condition)
                ) && 
                (
                    this.Value == input.Value ||
                    this.Value.Equals(input.Value)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.Condition.GetHashCode();
                hashCode = (hashCode * 59) + this.Value.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/Complaint.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Complaint
    /// </summary>
    [DataContract(Name = "Complaint")]
    public partial class Complaint : IEquatable<Complaint>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Complaint" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected Complaint() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="Complaint" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId.</param>
        /// <param name="eventType">eventType.</param>
        /// <param name="mailSource">mailSource.</param>
        /// <param name="mailMessageId">mailMessageId.</param>
        /// <param name="complaintRecipient">complaintRecipient (required).</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public Complaint(Guid id = default(Guid), Guid userId = default(Guid), string eventType = default(string), string mailSource = default(string), string mailMessageId = default(string), string complaintRecipient = default(string), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "complaintRecipient" is required (not null)
            if (complaintRecipient == null)
            {
                throw new ArgumentNullException("complaintRecipient is a required property for Complaint and cannot be null");
            }
            this.ComplaintRecipient = complaintRecipient;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.UserId = userId;
            this.EventType = eventType;
            this.MailSource = mailSource;
            this.MailMessageId = mailMessageId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = false)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets EventType
        /// </summary>
        [DataMember(Name = "eventType", EmitDefaultValue = false)]
        public string EventType { get; set; }

        /// <summary>
        /// Gets or Sets MailSource
        /// </summary>
        [DataMember(Name = "mailSource", EmitDefaultValue = false)]
        public string MailSource { get; set; }

        /// <summary>
        /// Gets or Sets MailMessageId
        /// </summary>
        [DataMember(Name = "mailMessageId", EmitDefaultValue = false)]
        public string MailMessageId { get; set; }

        /// <summary>
        /// Gets or Sets ComplaintRecipient
        /// </summary>
        [DataMember(Name = "complaintRecipient", IsRequired = true, EmitDefaultValue = true)]
        public string ComplaintRecipient { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class Complaint {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  EventType: ").Append(EventType).Append("\n");
            sb.Append("  MailSource: ").Append(MailSource).Append("\n");
            sb.Append("  MailMessageId: ").Append(MailMessageId).Append("\n");
            sb.Append("  ComplaintRecipient: ").Append(ComplaintRecipient).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as Complaint);
        }

        /// <summary>
        /// Returns true if Complaint instances are equal
        /// </summary>
        /// <param name="input">Instance of Complaint to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Complaint input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.EventType == input.EventType ||
                    (this.EventType != null &&
                    this.EventType.Equals(input.EventType))
                ) && 
                (
                    this.MailSource == input.MailSource ||
                    (this.MailSource != null &&
                    this.MailSource.Equals(input.MailSource))
                ) && 
                (
                    this.MailMessageId == input.MailMessageId ||
                    (this.MailMessageId != null &&
                    this.MailMessageId.Equals(input.MailMessageId))
                ) && 
                (
                    this.ComplaintRecipient == input.ComplaintRecipient ||
                    (this.ComplaintRecipient != null &&
                    this.ComplaintRecipient.Equals(input.ComplaintRecipient))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.EventType != null)
                {
                    hashCode = (hashCode * 59) + this.EventType.GetHashCode();
                }
                if (this.MailSource != null)
                {
                    hashCode = (hashCode * 59) + this.MailSource.GetHashCode();
                }
                if (this.MailMessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MailMessageId.GetHashCode();
                }
                if (this.ComplaintRecipient != null)
                {
                    hashCode = (hashCode * 59) + this.ComplaintRecipient.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailFeaturesClientSupportResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CheckEmailFeaturesClientSupportResults
    /// </summary>
    [DataContract(Name = "CheckEmailFeaturesClientSupportResults")]
    public partial class CheckEmailFeaturesClientSupportResults : IEquatable<CheckEmailFeaturesClientSupportResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailFeaturesClientSupportResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailFeaturesClientSupportResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailFeaturesClientSupportResults" /> class.
        /// </summary>
        /// <param name="result">result (required).</param>
        public CheckEmailFeaturesClientSupportResults(EmailFeatureSupportResult result = default(EmailFeatureSupportResult))
        {
            // to ensure "result" is required (not null)
            if (result == null)
            {
                throw new ArgumentNullException("result is a required property for CheckEmailFeaturesClientSupportResults and cannot be null");
            }
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", IsRequired = true, EmitDefaultValue = true)]
        public EmailFeatureSupportResult Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailFeaturesClientSupportResults {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailFeaturesClientSupportResults);
        }

        /// <summary>
        /// Returns true if CheckEmailFeaturesClientSupportResults instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailFeaturesClientSupportResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailFeaturesClientSupportResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailFeaturesClientSupportOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CheckEmailFeaturesClientSupportOptions
    /// </summary>
    [DataContract(Name = "CheckEmailFeaturesClientSupportOptions")]
    public partial class CheckEmailFeaturesClientSupportOptions : IEquatable<CheckEmailFeaturesClientSupportOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailFeaturesClientSupportOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailFeaturesClientSupportOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailFeaturesClientSupportOptions" /> class.
        /// </summary>
        /// <param name="emailBody">emailBody (required).</param>
        public CheckEmailFeaturesClientSupportOptions(string emailBody = default(string))
        {
            // to ensure "emailBody" is required (not null)
            if (emailBody == null)
            {
                throw new ArgumentNullException("emailBody is a required property for CheckEmailFeaturesClientSupportOptions and cannot be null");
            }
            this.EmailBody = emailBody;
        }

        /// <summary>
        /// Gets or Sets EmailBody
        /// </summary>
        [DataMember(Name = "emailBody", IsRequired = true, EmitDefaultValue = true)]
        public string EmailBody { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailFeaturesClientSupportOptions {\n");
            sb.Append("  EmailBody: ").Append(EmailBody).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailFeaturesClientSupportOptions);
        }

        /// <summary>
        /// Returns true if CheckEmailFeaturesClientSupportOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailFeaturesClientSupportOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailFeaturesClientSupportOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailBody == input.EmailBody ||
                    (this.EmailBody != null &&
                    this.EmailBody.Equals(input.EmailBody))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailBody != null)
                {
                    hashCode = (hashCode * 59) + this.EmailBody.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailClientSupportResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CheckEmailClientSupportResults
    /// </summary>
    [DataContract(Name = "CheckEmailClientSupportResults")]
    public partial class CheckEmailClientSupportResults : IEquatable<CheckEmailClientSupportResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailClientSupportResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailClientSupportResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailClientSupportResults" /> class.
        /// </summary>
        /// <param name="result">result (required).</param>
        public CheckEmailClientSupportResults(EmailFeatureSupportResult result = default(EmailFeatureSupportResult))
        {
            // to ensure "result" is required (not null)
            if (result == null)
            {
                throw new ArgumentNullException("result is a required property for CheckEmailClientSupportResults and cannot be null");
            }
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", IsRequired = true, EmitDefaultValue = true)]
        public EmailFeatureSupportResult Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailClientSupportResults {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailClientSupportResults);
        }

        /// <summary>
        /// Returns true if CheckEmailClientSupportResults instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailClientSupportResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailClientSupportResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailClientSupportOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for the email to be validated
    /// </summary>
    [DataContract(Name = "CheckEmailClientSupportOptions")]
    public partial class CheckEmailClientSupportOptions : IEquatable<CheckEmailClientSupportOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailClientSupportOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailClientSupportOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailClientSupportOptions" /> class.
        /// </summary>
        /// <param name="emailBody">emailBody (required).</param>
        public CheckEmailClientSupportOptions(string emailBody = default(string))
        {
            // to ensure "emailBody" is required (not null)
            if (emailBody == null)
            {
                throw new ArgumentNullException("emailBody is a required property for CheckEmailClientSupportOptions and cannot be null");
            }
            this.EmailBody = emailBody;
        }

        /// <summary>
        /// Gets or Sets EmailBody
        /// </summary>
        [DataMember(Name = "emailBody", IsRequired = true, EmitDefaultValue = true)]
        public string EmailBody { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailClientSupportOptions {\n");
            sb.Append("  EmailBody: ").Append(EmailBody).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailClientSupportOptions);
        }

        /// <summary>
        /// Returns true if CheckEmailClientSupportOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailClientSupportOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailClientSupportOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EmailBody == input.EmailBody ||
                    (this.EmailBody != null &&
                    this.EmailBody.Equals(input.EmailBody))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.EmailBody != null)
                {
                    hashCode = (hashCode * 59) + this.EmailBody.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailBodyResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CheckEmailBodyResults
    /// </summary>
    [DataContract(Name = "CheckEmailBodyResults")]
    public partial class CheckEmailBodyResults : IEquatable<CheckEmailBodyResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailBodyResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailBodyResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailBodyResults" /> class.
        /// </summary>
        /// <param name="hasIssues">hasIssues (required).</param>
        /// <param name="linkIssues">linkIssues (required).</param>
        /// <param name="imageIssues">imageIssues (required).</param>
        /// <param name="spellingIssues">spellingIssues (required).</param>
        public CheckEmailBodyResults(bool hasIssues = default(bool), List<LinkIssue> linkIssues = default(List<LinkIssue>), List<ImageIssue> imageIssues = default(List<ImageIssue>), List<SpellingIssue> spellingIssues = default(List<SpellingIssue>))
        {
            this.HasIssues = hasIssues;
            // to ensure "linkIssues" is required (not null)
            if (linkIssues == null)
            {
                throw new ArgumentNullException("linkIssues is a required property for CheckEmailBodyResults and cannot be null");
            }
            this.LinkIssues = linkIssues;
            // to ensure "imageIssues" is required (not null)
            if (imageIssues == null)
            {
                throw new ArgumentNullException("imageIssues is a required property for CheckEmailBodyResults and cannot be null");
            }
            this.ImageIssues = imageIssues;
            // to ensure "spellingIssues" is required (not null)
            if (spellingIssues == null)
            {
                throw new ArgumentNullException("spellingIssues is a required property for CheckEmailBodyResults and cannot be null");
            }
            this.SpellingIssues = spellingIssues;
        }

        /// <summary>
        /// Gets or Sets HasIssues
        /// </summary>
        [DataMember(Name = "hasIssues", IsRequired = true, EmitDefaultValue = true)]
        public bool HasIssues { get; set; }

        /// <summary>
        /// Gets or Sets LinkIssues
        /// </summary>
        [DataMember(Name = "linkIssues", IsRequired = true, EmitDefaultValue = true)]
        public List<LinkIssue> LinkIssues { get; set; }

        /// <summary>
        /// Gets or Sets ImageIssues
        /// </summary>
        [DataMember(Name = "imageIssues", IsRequired = true, EmitDefaultValue = true)]
        public List<ImageIssue> ImageIssues { get; set; }

        /// <summary>
        /// Gets or Sets SpellingIssues
        /// </summary>
        [DataMember(Name = "spellingIssues", IsRequired = true, EmitDefaultValue = true)]
        public List<SpellingIssue> SpellingIssues { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailBodyResults {\n");
            sb.Append("  HasIssues: ").Append(HasIssues).Append("\n");
            sb.Append("  LinkIssues: ").Append(LinkIssues).Append("\n");
            sb.Append("  ImageIssues: ").Append(ImageIssues).Append("\n");
            sb.Append("  SpellingIssues: ").Append(SpellingIssues).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailBodyResults);
        }

        /// <summary>
        /// Returns true if CheckEmailBodyResults instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailBodyResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailBodyResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.HasIssues == input.HasIssues ||
                    this.HasIssues.Equals(input.HasIssues)
                ) && 
                (
                    this.LinkIssues == input.LinkIssues ||
                    this.LinkIssues != null &&
                    input.LinkIssues != null &&
                    this.LinkIssues.SequenceEqual(input.LinkIssues)
                ) && 
                (
                    this.ImageIssues == input.ImageIssues ||
                    this.ImageIssues != null &&
                    input.ImageIssues != null &&
                    this.ImageIssues.SequenceEqual(input.ImageIssues)
                ) && 
                (
                    this.SpellingIssues == input.SpellingIssues ||
                    this.SpellingIssues != null &&
                    input.SpellingIssues != null &&
                    this.SpellingIssues.SequenceEqual(input.SpellingIssues)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.HasIssues.GetHashCode();
                if (this.LinkIssues != null)
                {
                    hashCode = (hashCode * 59) + this.LinkIssues.GetHashCode();
                }
                if (this.ImageIssues != null)
                {
                    hashCode = (hashCode * 59) + this.ImageIssues.GetHashCode();
                }
                if (this.SpellingIssues != null)
                {
                    hashCode = (hashCode * 59) + this.SpellingIssues.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CheckEmailBodyFeatureSupportResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CheckEmailBodyFeatureSupportResults
    /// </summary>
    [DataContract(Name = "CheckEmailBodyFeatureSupportResults")]
    public partial class CheckEmailBodyFeatureSupportResults : IEquatable<CheckEmailBodyFeatureSupportResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailBodyFeatureSupportResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CheckEmailBodyFeatureSupportResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CheckEmailBodyFeatureSupportResults" /> class.
        /// </summary>
        /// <param name="result">result (required).</param>
        public CheckEmailBodyFeatureSupportResults(EmailFeatureSupportResult result = default(EmailFeatureSupportResult))
        {
            // to ensure "result" is required (not null)
            if (result == null)
            {
                throw new ArgumentNullException("result is a required property for CheckEmailBodyFeatureSupportResults and cannot be null");
            }
            this.Result = result;
        }

        /// <summary>
        /// Gets or Sets Result
        /// </summary>
        [DataMember(Name = "result", IsRequired = true, EmitDefaultValue = true)]
        public EmailFeatureSupportResult Result { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CheckEmailBodyFeatureSupportResults {\n");
            sb.Append("  Result: ").Append(Result).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CheckEmailBodyFeatureSupportResults);
        }

        /// <summary>
        /// Returns true if CheckEmailBodyFeatureSupportResults instances are equal
        /// </summary>
        /// <param name="input">Instance of CheckEmailBodyFeatureSupportResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CheckEmailBodyFeatureSupportResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Result == input.Result ||
                    (this.Result != null &&
                    this.Result.Equals(input.Result))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Result != null)
                {
                    hashCode = (hashCode * 59) + this.Result.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/CanSendEmailResults.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// CanSendEmailResults
    /// </summary>
    [DataContract(Name = "CanSendEmailResults")]
    public partial class CanSendEmailResults : IEquatable<CanSendEmailResults>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CanSendEmailResults" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CanSendEmailResults() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CanSendEmailResults" /> class.
        /// </summary>
        /// <param name="isSendingPermitted">isSendingPermitted (required).</param>
        /// <param name="message">message.</param>
        public CanSendEmailResults(bool isSendingPermitted = default(bool), string message = default(string))
        {
            this.IsSendingPermitted = isSendingPermitted;
            this.Message = message;
        }

        /// <summary>
        /// Gets or Sets IsSendingPermitted
        /// </summary>
        [DataMember(Name = "isSendingPermitted", IsRequired = true, EmitDefaultValue = true)]
        public bool IsSendingPermitted { get; set; }

        /// <summary>
        /// Gets or Sets Message
        /// </summary>
        [DataMember(Name = "message", EmitDefaultValue = false)]
        public string Message { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CanSendEmailResults {\n");
            sb.Append("  IsSendingPermitted: ").Append(IsSendingPermitted).Append("\n");
            sb.Append("  Message: ").Append(Message).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as CanSendEmailResults);
        }

        /// <summary>
        /// Returns true if CanSendEmailResults instances are equal
        /// </summary>
        /// <param name="input">Instance of CanSendEmailResults to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(CanSendEmailResults input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.IsSendingPermitted == input.IsSendingPermitted ||
                    this.IsSendingPermitted.Equals(input.IsSendingPermitted)
                ) && 
                (
                    this.Message == input.Message ||
                    (this.Message != null &&
                    this.Message.Equals(input.Message))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.IsSendingPermitted.GetHashCode();
                if (this.Message != null)
                {
                    hashCode = (hashCode * 59) + this.Message.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BulkSendEmailOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Options for bulk sending an email from multiple addresses. See regular &#x60;sendEmail&#x60; methods for more information.
    /// </summary>
    [DataContract(Name = "BulkSendEmailOptions")]
    public partial class BulkSendEmailOptions : IEquatable<BulkSendEmailOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BulkSendEmailOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BulkSendEmailOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BulkSendEmailOptions" /> class.
        /// </summary>
        /// <param name="inboxIds">Inboxes to send the email from (required).</param>
        /// <param name="sendEmailOptions">sendEmailOptions (required).</param>
        public BulkSendEmailOptions(List<Guid> inboxIds = default(List<Guid>), SendEmailOptions sendEmailOptions = default(SendEmailOptions))
        {
            // to ensure "inboxIds" is required (not null)
            if (inboxIds == null)
            {
                throw new ArgumentNullException("inboxIds is a required property for BulkSendEmailOptions and cannot be null");
            }
            this.InboxIds = inboxIds;
            // to ensure "sendEmailOptions" is required (not null)
            if (sendEmailOptions == null)
            {
                throw new ArgumentNullException("sendEmailOptions is a required property for BulkSendEmailOptions and cannot be null");
            }
            this.SendEmailOptions = sendEmailOptions;
        }

        /// <summary>
        /// Inboxes to send the email from
        /// </summary>
        /// <value>Inboxes to send the email from</value>
        [DataMember(Name = "inboxIds", IsRequired = true, EmitDefaultValue = true)]
        public List<Guid> InboxIds { get; set; }

        /// <summary>
        /// Gets or Sets SendEmailOptions
        /// </summary>
        [DataMember(Name = "sendEmailOptions", IsRequired = true, EmitDefaultValue = true)]
        public SendEmailOptions SendEmailOptions { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BulkSendEmailOptions {\n");
            sb.Append("  InboxIds: ").Append(InboxIds).Append("\n");
            sb.Append("  SendEmailOptions: ").Append(SendEmailOptions).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BulkSendEmailOptions);
        }

        /// <summary>
        /// Returns true if BulkSendEmailOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of BulkSendEmailOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BulkSendEmailOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.InboxIds == input.InboxIds ||
                    this.InboxIds != null &&
                    input.InboxIds != null &&
                    this.InboxIds.SequenceEqual(input.InboxIds)
                ) && 
                (
                    this.SendEmailOptions == input.SendEmailOptions ||
                    (this.SendEmailOptions != null &&
                    this.SendEmailOptions.Equals(input.SendEmailOptions))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.InboxIds != null)
                {
                    hashCode = (hashCode * 59) + this.InboxIds.GetHashCode();
                }
                if (this.SendEmailOptions != null)
                {
                    hashCode = (hashCode * 59) + this.SendEmailOptions.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BouncedRecipientDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Bounced recipient
    /// </summary>
    [DataContract(Name = "BouncedRecipientDto")]
    public partial class BouncedRecipientDto : IEquatable<BouncedRecipientDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BouncedRecipientDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BouncedRecipientDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BouncedRecipientDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId.</param>
        /// <param name="sentEmailId">sentEmailId.</param>
        /// <param name="recipient">recipient (required).</param>
        /// <param name="diagnosticCode">diagnosticCode.</param>
        /// <param name="action">action.</param>
        /// <param name="bounceType">bounceType.</param>
        /// <param name="status">status.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public BouncedRecipientDto(Guid id = default(Guid), Guid? userId = default(Guid?), Guid? sentEmailId = default(Guid?), string recipient = default(string), string diagnosticCode = default(string), string action = default(string), string bounceType = default(string), string status = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            // to ensure "recipient" is required (not null)
            if (recipient == null)
            {
                throw new ArgumentNullException("recipient is a required property for BouncedRecipientDto and cannot be null");
            }
            this.Recipient = recipient;
            this.CreatedAt = createdAt;
            this.UserId = userId;
            this.SentEmailId = sentEmailId;
            this.DiagnosticCode = diagnosticCode;
            this.Action = action;
            this.BounceType = bounceType;
            this.Status = status;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", EmitDefaultValue = true)]
        public Guid? UserId { get; set; }

        /// <summary>
        /// Gets or Sets SentEmailId
        /// </summary>
        [DataMember(Name = "sentEmailId", EmitDefaultValue = true)]
        public Guid? SentEmailId { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", IsRequired = true, EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Gets or Sets DiagnosticCode
        /// </summary>
        [DataMember(Name = "diagnosticCode", EmitDefaultValue = true)]
        public string DiagnosticCode { get; set; }

        /// <summary>
        /// Gets or Sets Action
        /// </summary>
        [DataMember(Name = "action", EmitDefaultValue = true)]
        public string Action { get; set; }

        /// <summary>
        /// Gets or Sets BounceType
        /// </summary>
        [DataMember(Name = "bounceType", EmitDefaultValue = true)]
        public string BounceType { get; set; }

        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", EmitDefaultValue = true)]
        public string Status { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BouncedRecipientDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("  DiagnosticCode: ").Append(DiagnosticCode).Append("\n");
            sb.Append("  Action: ").Append(Action).Append("\n");
            sb.Append("  BounceType: ").Append(BounceType).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BouncedRecipientDto);
        }

        /// <summary>
        /// Returns true if BouncedRecipientDto instances are equal
        /// </summary>
        /// <param name="input">Instance of BouncedRecipientDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BouncedRecipientDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                ) && 
                (
                    this.DiagnosticCode == input.DiagnosticCode ||
                    (this.DiagnosticCode != null &&
                    this.DiagnosticCode.Equals(input.DiagnosticCode))
                ) && 
                (
                    this.Action == input.Action ||
                    (this.Action != null &&
                    this.Action.Equals(input.Action))
                ) && 
                (
                    this.BounceType == input.BounceType ||
                    (this.BounceType != null &&
                    this.BounceType.Equals(input.BounceType))
                ) && 
                (
                    this.Status == input.Status ||
                    (this.Status != null &&
                    this.Status.Equals(input.Status))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                if (this.DiagnosticCode != null)
                {
                    hashCode = (hashCode * 59) + this.DiagnosticCode.GetHashCode();
                }
                if (this.Action != null)
                {
                    hashCode = (hashCode * 59) + this.Action.GetHashCode();
                }
                if (this.BounceType != null)
                {
                    hashCode = (hashCode * 59) + this.BounceType.GetHashCode();
                }
                if (this.Status != null)
                {
                    hashCode = (hashCode * 59) + this.Status.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BouncedEmailDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Bounced email
    /// </summary>
    [DataContract(Name = "BouncedEmailDto")]
    public partial class BouncedEmailDto : IEquatable<BouncedEmailDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BouncedEmailDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BouncedEmailDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BouncedEmailDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="notificationType">notificationType (required).</param>
        /// <param name="sentToRecipients">sentToRecipients.</param>
        /// <param name="sender">sender (required).</param>
        /// <param name="bounceMta">bounceMta.</param>
        /// <param name="bounceType">bounceType.</param>
        /// <param name="bounceRecipients">bounceRecipients.</param>
        /// <param name="bounceSubType">bounceSubType.</param>
        /// <param name="sentEmailId">sentEmailId.</param>
        /// <param name="subject">subject.</param>
        /// <param name="createdAt">createdAt (required).</param>
        public BouncedEmailDto(Guid id = default(Guid), Guid userId = default(Guid), string notificationType = default(string), List<string> sentToRecipients = default(List<string>), string sender = default(string), string bounceMta = default(string), string bounceType = default(string), List<string> bounceRecipients = default(List<string>), string bounceSubType = default(string), Guid? sentEmailId = default(Guid?), string subject = default(string), DateTime createdAt = default(DateTime))
        {
            this.Id = id;
            this.UserId = userId;
            // to ensure "notificationType" is required (not null)
            if (notificationType == null)
            {
                throw new ArgumentNullException("notificationType is a required property for BouncedEmailDto and cannot be null");
            }
            this.NotificationType = notificationType;
            // to ensure "sender" is required (not null)
            if (sender == null)
            {
                throw new ArgumentNullException("sender is a required property for BouncedEmailDto and cannot be null");
            }
            this.Sender = sender;
            this.CreatedAt = createdAt;
            this.SentToRecipients = sentToRecipients;
            this.BounceMta = bounceMta;
            this.BounceType = bounceType;
            this.BounceRecipients = bounceRecipients;
            this.BounceSubType = bounceSubType;
            this.SentEmailId = sentEmailId;
            this.Subject = subject;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets NotificationType
        /// </summary>
        [DataMember(Name = "notificationType", IsRequired = true, EmitDefaultValue = true)]
        public string NotificationType { get; set; }

        /// <summary>
        /// Gets or Sets SentToRecipients
        /// </summary>
        [DataMember(Name = "sentToRecipients", EmitDefaultValue = true)]
        public List<string> SentToRecipients { get; set; }

        /// <summary>
        /// Gets or Sets Sender
        /// </summary>
        [DataMember(Name = "sender", IsRequired = true, EmitDefaultValue = true)]
        public string Sender { get; set; }

        /// <summary>
        /// Gets or Sets BounceMta
        /// </summary>
        [DataMember(Name = "bounceMta", EmitDefaultValue = true)]
        public string BounceMta { get; set; }

        /// <summary>
        /// Gets or Sets BounceType
        /// </summary>
        [DataMember(Name = "bounceType", EmitDefaultValue = true)]
        public string BounceType { get; set; }

        /// <summary>
        /// Gets or Sets BounceRecipients
        /// </summary>
        [DataMember(Name = "bounceRecipients", EmitDefaultValue = true)]
        public List<string> BounceRecipients { get; set; }

        /// <summary>
        /// Gets or Sets BounceSubType
        /// </summary>
        [DataMember(Name = "bounceSubType", EmitDefaultValue = true)]
        public string BounceSubType { get; set; }

        /// <summary>
        /// Gets or Sets SentEmailId
        /// </summary>
        [DataMember(Name = "sentEmailId", EmitDefaultValue = true)]
        public Guid? SentEmailId { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BouncedEmailDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  NotificationType: ").Append(NotificationType).Append("\n");
            sb.Append("  SentToRecipients: ").Append(SentToRecipients).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  BounceMta: ").Append(BounceMta).Append("\n");
            sb.Append("  BounceType: ").Append(BounceType).Append("\n");
            sb.Append("  BounceRecipients: ").Append(BounceRecipients).Append("\n");
            sb.Append("  BounceSubType: ").Append(BounceSubType).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BouncedEmailDto);
        }

        /// <summary>
        /// Returns true if BouncedEmailDto instances are equal
        /// </summary>
        /// <param name="input">Instance of BouncedEmailDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BouncedEmailDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.NotificationType == input.NotificationType ||
                    (this.NotificationType != null &&
                    this.NotificationType.Equals(input.NotificationType))
                ) && 
                (
                    this.SentToRecipients == input.SentToRecipients ||
                    this.SentToRecipients != null &&
                    input.SentToRecipients != null &&
                    this.SentToRecipients.SequenceEqual(input.SentToRecipients)
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.BounceMta == input.BounceMta ||
                    (this.BounceMta != null &&
                    this.BounceMta.Equals(input.BounceMta))
                ) && 
                (
                    this.BounceType == input.BounceType ||
                    (this.BounceType != null &&
                    this.BounceType.Equals(input.BounceType))
                ) && 
                (
                    this.BounceRecipients == input.BounceRecipients ||
                    this.BounceRecipients != null &&
                    input.BounceRecipients != null &&
                    this.BounceRecipients.SequenceEqual(input.BounceRecipients)
                ) && 
                (
                    this.BounceSubType == input.BounceSubType ||
                    (this.BounceSubType != null &&
                    this.BounceSubType.Equals(input.BounceSubType))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.NotificationType != null)
                {
                    hashCode = (hashCode * 59) + this.NotificationType.GetHashCode();
                }
                if (this.SentToRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.SentToRecipients.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.BounceMta != null)
                {
                    hashCode = (hashCode * 59) + this.BounceMta.GetHashCode();
                }
                if (this.BounceType != null)
                {
                    hashCode = (hashCode * 59) + this.BounceType.GetHashCode();
                }
                if (this.BounceRecipients != null)
                {
                    hashCode = (hashCode * 59) + this.BounceRecipients.GetHashCode();
                }
                if (this.BounceSubType != null)
                {
                    hashCode = (hashCode * 59) + this.BounceSubType.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BounceRecipientProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Bounced recipient
    /// </summary>
    [DataContract(Name = "BounceRecipientProjection")]
    public partial class BounceRecipientProjection : IEquatable<BounceRecipientProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BounceRecipientProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BounceRecipientProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BounceRecipientProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="sentEmailId">sentEmailId.</param>
        /// <param name="recipient">recipient (required).</param>
        /// <param name="bounceType">bounceType.</param>
        /// <param name="action">action.</param>
        /// <param name="id">id.</param>
        /// <param name="status">status.</param>
        public BounceRecipientProjection(DateTime createdAt = default(DateTime), Guid? sentEmailId = default(Guid?), string recipient = default(string), string bounceType = default(string), string action = default(string), Guid id = default(Guid), string status = default(string))
        {
            this.CreatedAt = createdAt;
            // to ensure "recipient" is required (not null)
            if (recipient == null)
            {
                throw new ArgumentNullException("recipient is a required property for BounceRecipientProjection and cannot be null");
            }
            this.Recipient = recipient;
            this.SentEmailId = sentEmailId;
            this.BounceType = bounceType;
            this.Action = action;
            this.Id = id;
            this.Status = status;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets SentEmailId
        /// </summary>
        [DataMember(Name = "sentEmailId", EmitDefaultValue = true)]
        public Guid? SentEmailId { get; set; }

        /// <summary>
        /// Gets or Sets Recipient
        /// </summary>
        [DataMember(Name = "recipient", IsRequired = true, EmitDefaultValue = true)]
        public string Recipient { get; set; }

        /// <summary>
        /// Gets or Sets BounceType
        /// </summary>
        [DataMember(Name = "bounceType", EmitDefaultValue = true)]
        public string BounceType { get; set; }

        /// <summary>
        /// Gets or Sets Action
        /// </summary>
        [DataMember(Name = "action", EmitDefaultValue = true)]
        public string Action { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets Status
        /// </summary>
        [DataMember(Name = "status", EmitDefaultValue = true)]
        public string Status { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BounceRecipientProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  SentEmailId: ").Append(SentEmailId).Append("\n");
            sb.Append("  Recipient: ").Append(Recipient).Append("\n");
            sb.Append("  BounceType: ").Append(BounceType).Append("\n");
            sb.Append("  Action: ").Append(Action).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BounceRecipientProjection);
        }

        /// <summary>
        /// Returns true if BounceRecipientProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of BounceRecipientProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BounceRecipientProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.SentEmailId == input.SentEmailId ||
                    (this.SentEmailId != null &&
                    this.SentEmailId.Equals(input.SentEmailId))
                ) && 
                (
                    this.Recipient == input.Recipient ||
                    (this.Recipient != null &&
                    this.Recipient.Equals(input.Recipient))
                ) && 
                (
                    this.BounceType == input.BounceType ||
                    (this.BounceType != null &&
                    this.BounceType.Equals(input.BounceType))
                ) && 
                (
                    this.Action == input.Action ||
                    (this.Action != null &&
                    this.Action.Equals(input.Action))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.Status == input.Status ||
                    (this.Status != null &&
                    this.Status.Equals(input.Status))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.SentEmailId != null)
                {
                    hashCode = (hashCode * 59) + this.SentEmailId.GetHashCode();
                }
                if (this.Recipient != null)
                {
                    hashCode = (hashCode * 59) + this.Recipient.GetHashCode();
                }
                if (this.BounceType != null)
                {
                    hashCode = (hashCode * 59) + this.BounceType.GetHashCode();
                }
                if (this.Action != null)
                {
                    hashCode = (hashCode * 59) + this.Action.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.Status != null)
                {
                    hashCode = (hashCode * 59) + this.Status.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BounceProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Bounced email event
    /// </summary>
    [DataContract(Name = "BounceProjection")]
    public partial class BounceProjection : IEquatable<BounceProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BounceProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BounceProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BounceProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="sender">sender (required).</param>
        /// <param name="bounceType">bounceType.</param>
        /// <param name="bounceMta">bounceMta.</param>
        /// <param name="subject">subject.</param>
        /// <param name="id">id.</param>
        public BounceProjection(DateTime createdAt = default(DateTime), string sender = default(string), string bounceType = default(string), string bounceMta = default(string), string subject = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            // to ensure "sender" is required (not null)
            if (sender == null)
            {
                throw new ArgumentNullException("sender is a required property for BounceProjection and cannot be null");
            }
            this.Sender = sender;
            this.BounceType = bounceType;
            this.BounceMta = bounceMta;
            this.Subject = subject;
            this.Id = id;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets Sender
        /// </summary>
        [DataMember(Name = "sender", IsRequired = true, EmitDefaultValue = true)]
        public string Sender { get; set; }

        /// <summary>
        /// Gets or Sets BounceType
        /// </summary>
        [DataMember(Name = "bounceType", EmitDefaultValue = true)]
        public string BounceType { get; set; }

        /// <summary>
        /// Gets or Sets BounceMta
        /// </summary>
        [DataMember(Name = "bounceMta", EmitDefaultValue = true)]
        public string BounceMta { get; set; }

        /// <summary>
        /// Gets or Sets Subject
        /// </summary>
        [DataMember(Name = "subject", EmitDefaultValue = true)]
        public string Subject { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BounceProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  Sender: ").Append(Sender).Append("\n");
            sb.Append("  BounceType: ").Append(BounceType).Append("\n");
            sb.Append("  BounceMta: ").Append(BounceMta).Append("\n");
            sb.Append("  Subject: ").Append(Subject).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BounceProjection);
        }

        /// <summary>
        /// Returns true if BounceProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of BounceProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BounceProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.Sender == input.Sender ||
                    (this.Sender != null &&
                    this.Sender.Equals(input.Sender))
                ) && 
                (
                    this.BounceType == input.BounceType ||
                    (this.BounceType != null &&
                    this.BounceType.Equals(input.BounceType))
                ) && 
                (
                    this.BounceMta == input.BounceMta ||
                    (this.BounceMta != null &&
                    this.BounceMta.Equals(input.BounceMta))
                ) && 
                (
                    this.Subject == input.Subject ||
                    (this.Subject != null &&
                    this.Subject.Equals(input.Subject))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.Sender != null)
                {
                    hashCode = (hashCode * 59) + this.Sender.GetHashCode();
                }
                if (this.BounceType != null)
                {
                    hashCode = (hashCode * 59) + this.BounceType.GetHashCode();
                }
                if (this.BounceMta != null)
                {
                    hashCode = (hashCode * 59) + this.BounceMta.GetHashCode();
                }
                if (this.Subject != null)
                {
                    hashCode = (hashCode * 59) + this.Subject.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/BasicAuthOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Basic Authentication options for webhooks. Will be used is present when calling webhook endpoints.
    /// </summary>
    [DataContract(Name = "BasicAuthOptions")]
    public partial class BasicAuthOptions : IEquatable<BasicAuthOptions>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BasicAuthOptions" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected BasicAuthOptions() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="BasicAuthOptions" /> class.
        /// </summary>
        /// <param name="username">username (required).</param>
        /// <param name="password">password (required).</param>
        public BasicAuthOptions(string username = default(string), string password = default(string))
        {
            // to ensure "username" is required (not null)
            if (username == null)
            {
                throw new ArgumentNullException("username is a required property for BasicAuthOptions and cannot be null");
            }
            this.Username = username;
            // to ensure "password" is required (not null)
            if (password == null)
            {
                throw new ArgumentNullException("password is a required property for BasicAuthOptions and cannot be null");
            }
            this.Password = password;
        }

        /// <summary>
        /// Gets or Sets Username
        /// </summary>
        [DataMember(Name = "username", IsRequired = true, EmitDefaultValue = true)]
        public string Username { get; set; }

        /// <summary>
        /// Gets or Sets Password
        /// </summary>
        [DataMember(Name = "password", IsRequired = true, EmitDefaultValue = true)]
        public string Password { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class BasicAuthOptions {\n");
            sb.Append("  Username: ").Append(Username).Append("\n");
            sb.Append("  Password: ").Append(Password).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as BasicAuthOptions);
        }

        /// <summary>
        /// Returns true if BasicAuthOptions instances are equal
        /// </summary>
        /// <param name="input">Instance of BasicAuthOptions to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(BasicAuthOptions input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Username == input.Username ||
                    (this.Username != null &&
                    this.Username.Equals(input.Username))
                ) && 
                (
                    this.Password == input.Password ||
                    (this.Password != null &&
                    this.Password.Equals(input.Password))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Username != null)
                {
                    hashCode = (hashCode * 59) + this.Username.GetHashCode();
                }
                if (this.Password != null)
                {
                    hashCode = (hashCode * 59) + this.Password.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AttachmentProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email attachment data
    /// </summary>
    [DataContract(Name = "AttachmentProjection")]
    public partial class AttachmentProjection : IEquatable<AttachmentProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AttachmentProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="contentId">Content ID of attachment..</param>
        /// <param name="attachmentId">Attachment ID (required).</param>
        /// <param name="name">name.</param>
        /// <param name="contentLength">Content length of attachment in bytes.</param>
        /// <param name="contentType">Content type of attachment..</param>
        public AttachmentProjection(DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), Guid userId = default(Guid), string contentId = default(string), string attachmentId = default(string), string name = default(string), long? contentLength = default(long?), string contentType = default(string))
        {
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.UserId = userId;
            // to ensure "attachmentId" is required (not null)
            if (attachmentId == null)
            {
                throw new ArgumentNullException("attachmentId is a required property for AttachmentProjection and cannot be null");
            }
            this.AttachmentId = attachmentId;
            this.ContentId = contentId;
            this.Name = name;
            this.ContentLength = contentLength;
            this.ContentType = contentType;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Content ID of attachment.
        /// </summary>
        /// <value>Content ID of attachment.</value>
        [DataMember(Name = "contentId", EmitDefaultValue = true)]
        public string ContentId { get; set; }

        /// <summary>
        /// Attachment ID
        /// </summary>
        /// <value>Attachment ID</value>
        [DataMember(Name = "attachmentId", IsRequired = true, EmitDefaultValue = true)]
        public string AttachmentId { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Content length of attachment in bytes
        /// </summary>
        /// <value>Content length of attachment in bytes</value>
        [DataMember(Name = "contentLength", EmitDefaultValue = true)]
        public long? ContentLength { get; set; }

        /// <summary>
        /// Content type of attachment.
        /// </summary>
        /// <value>Content type of attachment.</value>
        [DataMember(Name = "contentType", EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AttachmentProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  ContentId: ").Append(ContentId).Append("\n");
            sb.Append("  AttachmentId: ").Append(AttachmentId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  ContentLength: ").Append(ContentLength).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AttachmentProjection);
        }

        /// <summary>
        /// Returns true if AttachmentProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of AttachmentProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AttachmentProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.ContentId == input.ContentId ||
                    (this.ContentId != null &&
                    this.ContentId.Equals(input.ContentId))
                ) && 
                (
                    this.AttachmentId == input.AttachmentId ||
                    (this.AttachmentId != null &&
                    this.AttachmentId.Equals(input.AttachmentId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.ContentLength == input.ContentLength ||
                    (this.ContentLength != null &&
                    this.ContentLength.Equals(input.ContentLength))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.ContentId != null)
                {
                    hashCode = (hashCode * 59) + this.ContentId.GetHashCode();
                }
                if (this.AttachmentId != null)
                {
                    hashCode = (hashCode * 59) + this.AttachmentId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.ContentLength != null)
                {
                    hashCode = (hashCode * 59) + this.ContentLength.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AttachmentMetaData.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Meta data associated with an attachment. Attachments are stored as byte blobs so the meta data is stored separately.
    /// </summary>
    [DataContract(Name = "AttachmentMetaData")]
    public partial class AttachmentMetaData : IEquatable<AttachmentMetaData>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentMetaData" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AttachmentMetaData() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentMetaData" /> class.
        /// </summary>
        /// <param name="name">Name of attachment if given (required).</param>
        /// <param name="contentType">Content type of attachment such as &#x60;image/png&#x60; (required).</param>
        /// <param name="contentLength">Size of attachment in bytes (required).</param>
        /// <param name="id">ID of attachment. Can be used to with attachment controller endpoints to download attachment or with sending methods to attach to an email. (required).</param>
        /// <param name="contentId">CID of attachment.</param>
        public AttachmentMetaData(string name = default(string), string contentType = default(string), long contentLength = default(long), string id = default(string), string contentId = default(string))
        {
            // to ensure "name" is required (not null)
            if (name == null)
            {
                throw new ArgumentNullException("name is a required property for AttachmentMetaData and cannot be null");
            }
            this.Name = name;
            // to ensure "contentType" is required (not null)
            if (contentType == null)
            {
                throw new ArgumentNullException("contentType is a required property for AttachmentMetaData and cannot be null");
            }
            this.ContentType = contentType;
            this.ContentLength = contentLength;
            // to ensure "id" is required (not null)
            if (id == null)
            {
                throw new ArgumentNullException("id is a required property for AttachmentMetaData and cannot be null");
            }
            this.Id = id;
            this.ContentId = contentId;
        }

        /// <summary>
        /// Name of attachment if given
        /// </summary>
        /// <value>Name of attachment if given</value>
        [DataMember(Name = "name", IsRequired = true, EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// Content type of attachment such as &#x60;image/png&#x60;
        /// </summary>
        /// <value>Content type of attachment such as &#x60;image/png&#x60;</value>
        [DataMember(Name = "contentType", IsRequired = true, EmitDefaultValue = true)]
        public string ContentType { get; set; }

        /// <summary>
        /// Size of attachment in bytes
        /// </summary>
        /// <value>Size of attachment in bytes</value>
        [DataMember(Name = "contentLength", IsRequired = true, EmitDefaultValue = true)]
        public long ContentLength { get; set; }

        /// <summary>
        /// ID of attachment. Can be used to with attachment controller endpoints to download attachment or with sending methods to attach to an email.
        /// </summary>
        /// <value>ID of attachment. Can be used to with attachment controller endpoints to download attachment or with sending methods to attach to an email.</value>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public string Id { get; set; }

        /// <summary>
        /// CID of attachment
        /// </summary>
        /// <value>CID of attachment</value>
        [DataMember(Name = "contentId", EmitDefaultValue = true)]
        public string ContentId { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AttachmentMetaData {\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  ContentLength: ").Append(ContentLength).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  ContentId: ").Append(ContentId).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AttachmentMetaData);
        }

        /// <summary>
        /// Returns true if AttachmentMetaData instances are equal
        /// </summary>
        /// <param name="input">Instance of AttachmentMetaData to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AttachmentMetaData input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.ContentLength == input.ContentLength ||
                    this.ContentLength.Equals(input.ContentLength)
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.ContentId == input.ContentId ||
                    (this.ContentId != null &&
                    this.ContentId.Equals(input.ContentId))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ContentLength.GetHashCode();
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.ContentId != null)
                {
                    hashCode = (hashCode * 59) + this.ContentId.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AttachmentEntity.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// AttachmentEntity
    /// </summary>
    [DataContract(Name = "AttachmentEntity")]
    public partial class AttachmentEntity : IEquatable<AttachmentEntity>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentEntity" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AttachmentEntity() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentEntity" /> class.
        /// </summary>
        /// <param name="id">id.</param>
        /// <param name="attachmentId">attachmentId (required).</param>
        /// <param name="bucket">bucket.</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="contentType">contentType.</param>
        /// <param name="contentLength">contentLength.</param>
        /// <param name="contentId">contentId.</param>
        /// <param name="name">name.</param>
        /// <param name="inboxId">inboxId.</param>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        public AttachmentEntity(Guid id = default(Guid), string attachmentId = default(string), string bucket = default(string), Guid userId = default(Guid), string contentType = default(string), long contentLength = default(long), string contentId = default(string), string name = default(string), Guid inboxId = default(Guid), DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime))
        {
            // to ensure "attachmentId" is required (not null)
            if (attachmentId == null)
            {
                throw new ArgumentNullException("attachmentId is a required property for AttachmentEntity and cannot be null");
            }
            this.AttachmentId = attachmentId;
            this.UserId = userId;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.Id = id;
            this.Bucket = bucket;
            this.ContentType = contentType;
            this.ContentLength = contentLength;
            this.ContentId = contentId;
            this.Name = name;
            this.InboxId = inboxId;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public Guid Id { get; set; }

        /// <summary>
        /// Gets or Sets AttachmentId
        /// </summary>
        [DataMember(Name = "attachmentId", IsRequired = true, EmitDefaultValue = true)]
        public string AttachmentId { get; set; }

        /// <summary>
        /// Gets or Sets Bucket
        /// </summary>
        [DataMember(Name = "bucket", EmitDefaultValue = false)]
        public string Bucket { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets ContentType
        /// </summary>
        [DataMember(Name = "contentType", EmitDefaultValue = false)]
        public string ContentType { get; set; }

        /// <summary>
        /// Gets or Sets ContentLength
        /// </summary>
        [DataMember(Name = "contentLength", EmitDefaultValue = false)]
        public long ContentLength { get; set; }

        /// <summary>
        /// Gets or Sets ContentId
        /// </summary>
        [DataMember(Name = "contentId", EmitDefaultValue = false)]
        public string ContentId { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", EmitDefaultValue = false)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AttachmentEntity {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  AttachmentId: ").Append(AttachmentId).Append("\n");
            sb.Append("  Bucket: ").Append(Bucket).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  ContentType: ").Append(ContentType).Append("\n");
            sb.Append("  ContentLength: ").Append(ContentLength).Append("\n");
            sb.Append("  ContentId: ").Append(ContentId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AttachmentEntity);
        }

        /// <summary>
        /// Returns true if AttachmentEntity instances are equal
        /// </summary>
        /// <param name="input">Instance of AttachmentEntity to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AttachmentEntity input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.AttachmentId == input.AttachmentId ||
                    (this.AttachmentId != null &&
                    this.AttachmentId.Equals(input.AttachmentId))
                ) && 
                (
                    this.Bucket == input.Bucket ||
                    (this.Bucket != null &&
                    this.Bucket.Equals(input.Bucket))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.ContentType == input.ContentType ||
                    (this.ContentType != null &&
                    this.ContentType.Equals(input.ContentType))
                ) && 
                (
                    this.ContentLength == input.ContentLength ||
                    this.ContentLength.Equals(input.ContentLength)
                ) && 
                (
                    this.ContentId == input.ContentId ||
                    (this.ContentId != null &&
                    this.ContentId.Equals(input.ContentId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.AttachmentId != null)
                {
                    hashCode = (hashCode * 59) + this.AttachmentId.GetHashCode();
                }
                if (this.Bucket != null)
                {
                    hashCode = (hashCode * 59) + this.Bucket.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.ContentType != null)
                {
                    hashCode = (hashCode * 59) + this.ContentType.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.ContentLength.GetHashCode();
                if (this.ContentId != null)
                {
                    hashCode = (hashCode * 59) + this.ContentId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AliasProjection.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Representation of a alias
    /// </summary>
    [DataContract(Name = "AliasProjection")]
    public partial class AliasProjection : IEquatable<AliasProjection>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AliasProjection" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AliasProjection() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AliasProjection" /> class.
        /// </summary>
        /// <param name="createdAt">createdAt (required).</param>
        /// <param name="updatedAt">updatedAt (required).</param>
        /// <param name="inboxId">inboxId (required).</param>
        /// <param name="emailAddress">emailAddress (required).</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="useThreads">useThreads.</param>
        /// <param name="name">name.</param>
        /// <param name="id">id (required).</param>
        public AliasProjection(DateTime createdAt = default(DateTime), DateTime updatedAt = default(DateTime), Guid inboxId = default(Guid), string emailAddress = default(string), Guid userId = default(Guid), bool useThreads = default(bool), string name = default(string), Guid id = default(Guid))
        {
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
            this.InboxId = inboxId;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for AliasProjection and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.UserId = userId;
            this.Id = id;
            this.UseThreads = useThreads;
            this.Name = name;
        }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", IsRequired = true, EmitDefaultValue = true)]
        public DateTime UpdatedAt { get; set; }

        /// <summary>
        /// Gets or Sets InboxId
        /// </summary>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets EmailAddress
        /// </summary>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or Sets UseThreads
        /// </summary>
        [DataMember(Name = "useThreads", EmitDefaultValue = true)]
        public bool UseThreads { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AliasProjection {\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  UseThreads: ").Append(UseThreads).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AliasProjection);
        }

        /// <summary>
        /// Returns true if AliasProjection instances are equal
        /// </summary>
        /// <param name="input">Instance of AliasProjection to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AliasProjection input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.UseThreads == input.UseThreads ||
                    this.UseThreads.Equals(input.UseThreads)
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.UseThreads.GetHashCode();
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AliasDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Email alias representation
    /// </summary>
    [DataContract(Name = "AliasDto")]
    public partial class AliasDto : IEquatable<AliasDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AliasDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AliasDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AliasDto" /> class.
        /// </summary>
        /// <param name="id">id (required).</param>
        /// <param name="emailAddress">The alias&#39;s email address for receiving email (required).</param>
        /// <param name="maskedEmailAddress">The underlying email address that is hidden and will received forwarded email.</param>
        /// <param name="userId">userId (required).</param>
        /// <param name="inboxId">Inbox that is associated with the alias (required).</param>
        /// <param name="name">name.</param>
        /// <param name="useThreads">If alias will generate response threads or not when email are received by it.</param>
        /// <param name="isVerified">Has the alias been verified. You must verify an alias if the masked email address has not yet been verified by your account (required).</param>
        /// <param name="domainId">Domain ID associated with the alias.</param>
        /// <param name="createdAt">createdAt.</param>
        /// <param name="updatedAt">updatedAt.</param>
        public AliasDto(Guid id = default(Guid), string emailAddress = default(string), string maskedEmailAddress = default(string), Guid userId = default(Guid), Guid inboxId = default(Guid), string name = default(string), bool? useThreads = default(bool?), bool isVerified = default(bool), Guid? domainId = default(Guid?), DateTime? createdAt = default(DateTime?), DateTime? updatedAt = default(DateTime?))
        {
            this.Id = id;
            // to ensure "emailAddress" is required (not null)
            if (emailAddress == null)
            {
                throw new ArgumentNullException("emailAddress is a required property for AliasDto and cannot be null");
            }
            this.EmailAddress = emailAddress;
            this.UserId = userId;
            this.InboxId = inboxId;
            this.IsVerified = isVerified;
            this.MaskedEmailAddress = maskedEmailAddress;
            this.Name = name;
            this.UseThreads = useThreads;
            this.DomainId = domainId;
            this.CreatedAt = createdAt;
            this.UpdatedAt = updatedAt;
        }

        /// <summary>
        /// Gets or Sets Id
        /// </summary>
        [DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true)]
        public Guid Id { get; set; }

        /// <summary>
        /// The alias&#39;s email address for receiving email
        /// </summary>
        /// <value>The alias&#39;s email address for receiving email</value>
        [DataMember(Name = "emailAddress", IsRequired = true, EmitDefaultValue = true)]
        public string EmailAddress { get; set; }

        /// <summary>
        /// The underlying email address that is hidden and will received forwarded email
        /// </summary>
        /// <value>The underlying email address that is hidden and will received forwarded email</value>
        [DataMember(Name = "maskedEmailAddress", EmitDefaultValue = true)]
        public string MaskedEmailAddress { get; set; }

        /// <summary>
        /// Gets or Sets UserId
        /// </summary>
        [DataMember(Name = "userId", IsRequired = true, EmitDefaultValue = true)]
        public Guid UserId { get; set; }

        /// <summary>
        /// Inbox that is associated with the alias
        /// </summary>
        /// <value>Inbox that is associated with the alias</value>
        [DataMember(Name = "inboxId", IsRequired = true, EmitDefaultValue = true)]
        public Guid InboxId { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = true)]
        public string Name { get; set; }

        /// <summary>
        /// If alias will generate response threads or not when email are received by it
        /// </summary>
        /// <value>If alias will generate response threads or not when email are received by it</value>
        [DataMember(Name = "useThreads", EmitDefaultValue = true)]
        public bool? UseThreads { get; set; }

        /// <summary>
        /// Has the alias been verified. You must verify an alias if the masked email address has not yet been verified by your account
        /// </summary>
        /// <value>Has the alias been verified. You must verify an alias if the masked email address has not yet been verified by your account</value>
        [DataMember(Name = "isVerified", IsRequired = true, EmitDefaultValue = true)]
        public bool IsVerified { get; set; }

        /// <summary>
        /// Domain ID associated with the alias
        /// </summary>
        /// <value>Domain ID associated with the alias</value>
        [DataMember(Name = "domainId", EmitDefaultValue = true)]
        public Guid? DomainId { get; set; }

        /// <summary>
        /// Gets or Sets CreatedAt
        /// </summary>
        [DataMember(Name = "createdAt", EmitDefaultValue = true)]
        public DateTime? CreatedAt { get; set; }

        /// <summary>
        /// Gets or Sets UpdatedAt
        /// </summary>
        [DataMember(Name = "updatedAt", EmitDefaultValue = true)]
        public DateTime? UpdatedAt { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AliasDto {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  EmailAddress: ").Append(EmailAddress).Append("\n");
            sb.Append("  MaskedEmailAddress: ").Append(MaskedEmailAddress).Append("\n");
            sb.Append("  UserId: ").Append(UserId).Append("\n");
            sb.Append("  InboxId: ").Append(InboxId).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  UseThreads: ").Append(UseThreads).Append("\n");
            sb.Append("  IsVerified: ").Append(IsVerified).Append("\n");
            sb.Append("  DomainId: ").Append(DomainId).Append("\n");
            sb.Append("  CreatedAt: ").Append(CreatedAt).Append("\n");
            sb.Append("  UpdatedAt: ").Append(UpdatedAt).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AliasDto);
        }

        /// <summary>
        /// Returns true if AliasDto instances are equal
        /// </summary>
        /// <param name="input">Instance of AliasDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AliasDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.Id == input.Id ||
                    (this.Id != null &&
                    this.Id.Equals(input.Id))
                ) && 
                (
                    this.EmailAddress == input.EmailAddress ||
                    (this.EmailAddress != null &&
                    this.EmailAddress.Equals(input.EmailAddress))
                ) && 
                (
                    this.MaskedEmailAddress == input.MaskedEmailAddress ||
                    (this.MaskedEmailAddress != null &&
                    this.MaskedEmailAddress.Equals(input.MaskedEmailAddress))
                ) && 
                (
                    this.UserId == input.UserId ||
                    (this.UserId != null &&
                    this.UserId.Equals(input.UserId))
                ) && 
                (
                    this.InboxId == input.InboxId ||
                    (this.InboxId != null &&
                    this.InboxId.Equals(input.InboxId))
                ) && 
                (
                    this.Name == input.Name ||
                    (this.Name != null &&
                    this.Name.Equals(input.Name))
                ) && 
                (
                    this.UseThreads == input.UseThreads ||
                    (this.UseThreads != null &&
                    this.UseThreads.Equals(input.UseThreads))
                ) && 
                (
                    this.IsVerified == input.IsVerified ||
                    this.IsVerified.Equals(input.IsVerified)
                ) && 
                (
                    this.DomainId == input.DomainId ||
                    (this.DomainId != null &&
                    this.DomainId.Equals(input.DomainId))
                ) && 
                (
                    this.CreatedAt == input.CreatedAt ||
                    (this.CreatedAt != null &&
                    this.CreatedAt.Equals(input.CreatedAt))
                ) && 
                (
                    this.UpdatedAt == input.UpdatedAt ||
                    (this.UpdatedAt != null &&
                    this.UpdatedAt.Equals(input.UpdatedAt))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Id != null)
                {
                    hashCode = (hashCode * 59) + this.Id.GetHashCode();
                }
                if (this.EmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.EmailAddress.GetHashCode();
                }
                if (this.MaskedEmailAddress != null)
                {
                    hashCode = (hashCode * 59) + this.MaskedEmailAddress.GetHashCode();
                }
                if (this.UserId != null)
                {
                    hashCode = (hashCode * 59) + this.UserId.GetHashCode();
                }
                if (this.InboxId != null)
                {
                    hashCode = (hashCode * 59) + this.InboxId.GetHashCode();
                }
                if (this.Name != null)
                {
                    hashCode = (hashCode * 59) + this.Name.GetHashCode();
                }
                if (this.UseThreads != null)
                {
                    hashCode = (hashCode * 59) + this.UseThreads.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.IsVerified.GetHashCode();
                if (this.DomainId != null)
                {
                    hashCode = (hashCode * 59) + this.DomainId.GetHashCode();
                }
                if (this.CreatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.CreatedAt.GetHashCode();
                }
                if (this.UpdatedAt != null)
                {
                    hashCode = (hashCode * 59) + this.UpdatedAt.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AccountBounceBlockDto.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// AccountBounceBlockDto
    /// </summary>
    [DataContract(Name = "AccountBounceBlockDto")]
    public partial class AccountBounceBlockDto : IEquatable<AccountBounceBlockDto>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AccountBounceBlockDto" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AccountBounceBlockDto() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AccountBounceBlockDto" /> class.
        /// </summary>
        /// <param name="isSendingBlocked">isSendingBlocked (required).</param>
        /// <param name="bounceCount">bounceCount (required).</param>
        /// <param name="bounceCountToday">bounceCountToday (required).</param>
        /// <param name="maximumDailyBounces">maximumDailyBounces (required).</param>
        /// <param name="maximumAccountBounces">maximumAccountBounces (required).</param>
        public AccountBounceBlockDto(bool isSendingBlocked = default(bool), long bounceCount = default(long), long bounceCountToday = default(long), long maximumDailyBounces = default(long), long maximumAccountBounces = default(long))
        {
            this.IsSendingBlocked = isSendingBlocked;
            this.BounceCount = bounceCount;
            this.BounceCountToday = bounceCountToday;
            this.MaximumDailyBounces = maximumDailyBounces;
            this.MaximumAccountBounces = maximumAccountBounces;
        }

        /// <summary>
        /// Gets or Sets IsSendingBlocked
        /// </summary>
        [DataMember(Name = "isSendingBlocked", IsRequired = true, EmitDefaultValue = true)]
        public bool IsSendingBlocked { get; set; }

        /// <summary>
        /// Gets or Sets BounceCount
        /// </summary>
        [DataMember(Name = "bounceCount", IsRequired = true, EmitDefaultValue = true)]
        public long BounceCount { get; set; }

        /// <summary>
        /// Gets or Sets BounceCountToday
        /// </summary>
        [DataMember(Name = "bounceCountToday", IsRequired = true, EmitDefaultValue = true)]
        public long BounceCountToday { get; set; }

        /// <summary>
        /// Gets or Sets MaximumDailyBounces
        /// </summary>
        [DataMember(Name = "maximumDailyBounces", IsRequired = true, EmitDefaultValue = true)]
        public long MaximumDailyBounces { get; set; }

        /// <summary>
        /// Gets or Sets MaximumAccountBounces
        /// </summary>
        [DataMember(Name = "maximumAccountBounces", IsRequired = true, EmitDefaultValue = true)]
        public long MaximumAccountBounces { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AccountBounceBlockDto {\n");
            sb.Append("  IsSendingBlocked: ").Append(IsSendingBlocked).Append("\n");
            sb.Append("  BounceCount: ").Append(BounceCount).Append("\n");
            sb.Append("  BounceCountToday: ").Append(BounceCountToday).Append("\n");
            sb.Append("  MaximumDailyBounces: ").Append(MaximumDailyBounces).Append("\n");
            sb.Append("  MaximumAccountBounces: ").Append(MaximumAccountBounces).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AccountBounceBlockDto);
        }

        /// <summary>
        /// Returns true if AccountBounceBlockDto instances are equal
        /// </summary>
        /// <param name="input">Instance of AccountBounceBlockDto to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AccountBounceBlockDto input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.IsSendingBlocked == input.IsSendingBlocked ||
                    this.IsSendingBlocked.Equals(input.IsSendingBlocked)
                ) && 
                (
                    this.BounceCount == input.BounceCount ||
                    this.BounceCount.Equals(input.BounceCount)
                ) && 
                (
                    this.BounceCountToday == input.BounceCountToday ||
                    this.BounceCountToday.Equals(input.BounceCountToday)
                ) && 
                (
                    this.MaximumDailyBounces == input.MaximumDailyBounces ||
                    this.MaximumDailyBounces.Equals(input.MaximumDailyBounces)
                ) && 
                (
                    this.MaximumAccountBounces == input.MaximumAccountBounces ||
                    this.MaximumAccountBounces.Equals(input.MaximumAccountBounces)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.IsSendingBlocked.GetHashCode();
                hashCode = (hashCode * 59) + this.BounceCount.GetHashCode();
                hashCode = (hashCode * 59) + this.BounceCountToday.GetHashCode();
                hashCode = (hashCode * 59) + this.MaximumDailyBounces.GetHashCode();
                hashCode = (hashCode * 59) + this.MaximumAccountBounces.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AbstractWebhookPayload.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = mailslurp.Client.OpenAPIDateConverter;

namespace mailslurp.Model
{
    /// <summary>
    /// Abstract webhook payload. Use the correct payload type for your webhook event type in order to access all the specific properties for that event. See the &#x60;NEW_EMAIL&#x60;,&#x60;NEW_CONTACT&#x60;, &#x60;NEW_ATTACHMENT&#x60; and &#x60;EMAIL_OPENED&#x60; payloads for the properties available for those events.
    /// </summary>
    [DataContract(Name = "AbstractWebhookPayload")]
    public partial class AbstractWebhookPayload : IEquatable<AbstractWebhookPayload>, IValidatableObject
    {
        /// <summary>
        /// Defines EventName
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum EventNameEnum
        {
            /// <summary>
            /// Enum EMAILRECEIVED for value: EMAIL_RECEIVED
            /// </summary>
            [EnumMember(Value = "EMAIL_RECEIVED")]
            EMAILRECEIVED = 1,

            /// <summary>
            /// Enum NEWEMAIL for value: NEW_EMAIL
            /// </summary>
            [EnumMember(Value = "NEW_EMAIL")]
            NEWEMAIL = 2,

            /// <summary>
            /// Enum NEWCONTACT for value: NEW_CONTACT
            /// </summary>
            [EnumMember(Value = "NEW_CONTACT")]
            NEWCONTACT = 3,

            /// <summary>
            /// Enum NEWATTACHMENT for value: NEW_ATTACHMENT
            /// </summary>
            [EnumMember(Value = "NEW_ATTACHMENT")]
            NEWATTACHMENT = 4,

            /// <summary>
            /// Enum EMAILOPENED for value: EMAIL_OPENED
            /// </summary>
            [EnumMember(Value = "EMAIL_OPENED")]
            EMAILOPENED = 5,

            /// <summary>
            /// Enum EMAILREAD for value: EMAIL_READ
            /// </summary>
            [EnumMember(Value = "EMAIL_READ")]
            EMAILREAD = 6,

            /// <summary>
            /// Enum DELIVERYSTATUS for value: DELIVERY_STATUS
            /// </summary>
            [EnumMember(Value = "DELIVERY_STATUS")]
            DELIVERYSTATUS = 7,

            /// <summary>
            /// Enum BOUNCE for value: BOUNCE
            /// </summary>
            [EnumMember(Value = "BOUNCE")]
            BOUNCE = 8,

            /// <summary>
            /// Enum BOUNCERECIPIENT for value: BOUNCE_RECIPIENT
            /// </summary>
            [EnumMember(Value = "BOUNCE_RECIPIENT")]
            BOUNCERECIPIENT = 9,

            /// <summary>
            /// Enum NEWSMS for value: NEW_SMS
            /// </summary>
            [EnumMember(Value = "NEW_SMS")]
            NEWSMS = 10

        }


        /// <summary>
        /// Gets or Sets EventName
        /// </summary>
        [DataMember(Name = "eventName", IsRequired = true, EmitDefaultValue = true)]
        public EventNameEnum EventName { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="AbstractWebhookPayload" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected AbstractWebhookPayload() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="AbstractWebhookPayload" /> class.
        /// </summary>
        /// <param name="eventName">eventName (required).</param>
        /// <param name="messageId">messageId (required).</param>
        /// <param name="webhookId">webhookId (required).</param>
        /// <param name="webhookName">webhookName.</param>
        public AbstractWebhookPayload(EventNameEnum eventName = default(EventNameEnum), string messageId = default(string), Guid webhookId = default(Guid), string webhookName = default(string))
        {
            this.EventName = eventName;
            // to ensure "messageId" is required (not null)
            if (messageId == null)
            {
                throw new ArgumentNullException("messageId is a required property for AbstractWebhookPayload and cannot be null");
            }
            this.MessageId = messageId;
            this.WebhookId = webhookId;
            this.WebhookName = webhookName;
        }

        /// <summary>
        /// Gets or Sets MessageId
        /// </summary>
        [DataMember(Name = "messageId", IsRequired = true, EmitDefaultValue = true)]
        public string MessageId { get; set; }

        /// <summary>
        /// Gets or Sets WebhookId
        /// </summary>
        [DataMember(Name = "webhookId", IsRequired = true, EmitDefaultValue = true)]
        public Guid WebhookId { get; set; }

        /// <summary>
        /// Gets or Sets WebhookName
        /// </summary>
        [DataMember(Name = "webhookName", EmitDefaultValue = false)]
        public string WebhookName { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class AbstractWebhookPayload {\n");
            sb.Append("  EventName: ").Append(EventName).Append("\n");
            sb.Append("  MessageId: ").Append(MessageId).Append("\n");
            sb.Append("  WebhookId: ").Append(WebhookId).Append("\n");
            sb.Append("  WebhookName: ").Append(WebhookName).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as AbstractWebhookPayload);
        }

        /// <summary>
        /// Returns true if AbstractWebhookPayload instances are equal
        /// </summary>
        /// <param name="input">Instance of AbstractWebhookPayload to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(AbstractWebhookPayload input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.EventName == input.EventName ||
                    this.EventName.Equals(input.EventName)
                ) && 
                (
                    this.MessageId == input.MessageId ||
                    (this.MessageId != null &&
                    this.MessageId.Equals(input.MessageId))
                ) && 
                (
                    this.WebhookId == input.WebhookId ||
                    (this.WebhookId != null &&
                    this.WebhookId.Equals(input.WebhookId))
                ) && 
                (
                    this.WebhookName == input.WebhookName ||
                    (this.WebhookName != null &&
                    this.WebhookName.Equals(input.WebhookName))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.EventName.GetHashCode();
                if (this.MessageId != null)
                {
                    hashCode = (hashCode * 59) + this.MessageId.GetHashCode();
                }
                if (this.WebhookId != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookId.GetHashCode();
                }
                if (this.WebhookName != null)
                {
                    hashCode = (hashCode * 59) + this.WebhookName.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}

src/mailslurp/Model/AbstractOpenAPISchema.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

namespace mailslurp.Model
{
    /// <summary>
    ///  Abstract base class for oneOf, anyOf schemas in the OpenAPI specification
    /// </summary>
    public abstract partial class AbstractOpenAPISchema
    {
        /// <summary>
        ///  Custom JSON serializer
        /// </summary>
        static public readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
        {
            // OpenAPI generated types generally hide default constructors.
            ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
            MissingMemberHandling = MissingMemberHandling.Error,
            ContractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy
                {
                    OverrideSpecifiedNames = false
                }
            }
        };

        /// <summary>
        ///  Custom JSON serializer for objects with additional properties
        /// </summary>
        static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings = new JsonSerializerSettings
        {
            // OpenAPI generated types generally hide default constructors.
            ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
            MissingMemberHandling = MissingMemberHandling.Ignore,
            ContractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy
                {
                    OverrideSpecifiedNames = false
                }
            }
        };

        /// <summary>
        /// Gets or Sets the actual instance
        /// </summary>
        public abstract Object ActualInstance { get; set; }

        /// <summary>
        /// Gets or Sets IsNullable to indicate whether the instance is nullable
        /// </summary>
        public bool IsNullable { get; protected set; }

        /// <summary>
        /// Gets or Sets the schema type, which can be either `oneOf` or `anyOf`
        /// </summary>
        public string SchemaType { get; protected set; }

        /// <summary>
        /// Converts the instance into JSON string.
        /// </summary>
        public abstract string ToJson();
    }
}

src/mailslurp/Client/RetryConfiguration.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using Polly;
using RestSharp;

namespace mailslurp.Client
{
    /// <summary>
    /// Configuration class to set the polly retry policies to be applied to the requests.
    /// </summary>
    public static class RetryConfiguration
    {
        /// <summary>
        /// Retry policy
        /// </summary>
        public static Policy<RestResponse> RetryPolicy { get; set; }

        /// <summary>
        /// Async retry policy
        /// </summary>
        public static AsyncPolicy<RestResponse> AsyncRetryPolicy { get; set; }
    }
}

src/mailslurp/Client/RequestOptions.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.IO;
using System.Net;

namespace mailslurp.Client
{
    /// <summary>
    /// A container for generalized request inputs. This type allows consumers to extend the request functionality
    /// by abstracting away from the default (built-in) request framework (e.g. RestSharp).
    /// </summary>
    public class RequestOptions
    {
        /// <summary>
        /// Parameters to be bound to path parts of the Request's URL
        /// </summary>
        public Dictionary<string, string> PathParameters { get; set; }

        /// <summary>
        /// Query parameters to be applied to the request.
        /// Keys may have 1 or more values associated.
        /// </summary>
        public Multimap<string, string> QueryParameters { get; set; }

        /// <summary>
        /// Header parameters to be applied to to the request.
        /// Keys may have 1 or more values associated.
        /// </summary>
        public Multimap<string, string> HeaderParameters { get; set; }

        /// <summary>
        /// Form parameters to be sent along with the request.
        /// </summary>
        public Dictionary<string, string> FormParameters { get; set; }

        /// <summary>
        /// File parameters to be sent along with the request.
        /// </summary>
        public Multimap<string, Stream> FileParameters { get; set; }

        /// <summary>
        /// Cookies to be sent along with the request.
        /// </summary>
        public List<Cookie> Cookies { get; set; }

        /// <summary>
        /// Operation associated with the request path.
        /// </summary>
        public string Operation { get; set; }

        /// <summary>
        /// Index associated with the operation.
        /// </summary>
        public int OperationIndex { get; set; }

        /// <summary>
        /// Any data associated with a request body.
        /// </summary>
        public Object Data { get; set; }

        /// <summary>
        /// Constructs a new instance of <see cref="RequestOptions"/>
        /// </summary>
        public RequestOptions()
        {
            PathParameters = new Dictionary<string, string>();
            QueryParameters = new Multimap<string, string>();
            HeaderParameters = new Multimap<string, string>();
            FormParameters = new Dictionary<string, string>();
            FileParameters = new Multimap<string, Stream>();
            Cookies = new List<Cookie>();
        }
    }
}

src/mailslurp/Client/OpenAPIDateConverter.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */

using Newtonsoft.Json.Converters;

namespace mailslurp.Client
{
    /// <summary>
    /// Formatter for 'date' openapi formats ss defined by full-date - RFC3339
    /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
    /// </summary>
    public class OpenAPIDateConverter : IsoDateTimeConverter
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="OpenAPIDateConverter" /> class.
        /// </summary>
        public OpenAPIDateConverter()
        {
            // full-date   = date-fullyear "-" date-month "-" date-mday
            DateTimeFormat = "yyyy-MM-dd";
        }
    }
}

src/mailslurp/Client/Multimap.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;

namespace mailslurp.Client
{
    /// <summary>
    /// A dictionary in which one key has many associated values.
    /// </summary>
    /// <typeparam name="TKey">The type of the key</typeparam>
    /// <typeparam name="TValue">The type of the value associated with the key.</typeparam>
    public class Multimap<TKey, TValue> : IDictionary<TKey, IList<TValue>>
    {
        #region Private Fields

        private readonly Dictionary<TKey, IList<TValue>> _dictionary;

        #endregion Private Fields

        #region Constructors

        /// <summary>
        /// Empty Constructor.
        /// </summary>
        public Multimap()
        {
            _dictionary = new Dictionary<TKey, IList<TValue>>();
        }

        /// <summary>
        /// Constructor with comparer.
        /// </summary>
        /// <param name="comparer"></param>
        public Multimap(IEqualityComparer<TKey> comparer)
        {
            _dictionary = new Dictionary<TKey, IList<TValue>>(comparer);
        }

        #endregion Constructors

        #region Enumerators

        /// <summary>
        /// To get the enumerator.
        /// </summary>
        /// <returns>Enumerator</returns>
        public IEnumerator<KeyValuePair<TKey, IList<TValue>>> GetEnumerator()
        {
            return _dictionary.GetEnumerator();
        }

        /// <summary>
        /// To get the enumerator.
        /// </summary>
        /// <returns>Enumerator</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return _dictionary.GetEnumerator();
        }

        #endregion Enumerators

        #region Public Members
        /// <summary>
        /// Add values to Multimap
        /// </summary>
        /// <param name="item">Key value pair</param>
        public void Add(KeyValuePair<TKey, IList<TValue>> item)
        {
            if (!TryAdd(item.Key, item.Value))
                throw new InvalidOperationException("Could not add values to Multimap.");
        }

        /// <summary>
        /// Add Multimap to Multimap
        /// </summary>
        /// <param name="multimap">Multimap</param>
        public void Add(Multimap<TKey, TValue> multimap)
        {
            foreach (var item in multimap)
            {
                if (!TryAdd(item.Key, item.Value))
                    throw new InvalidOperationException("Could not add values to Multimap.");
            }
        }

        /// <summary>
        /// Clear Multimap
        /// </summary>
        public void Clear()
        {
            _dictionary.Clear();
        }

        /// <summary>
        /// Determines whether Multimap contains the specified item.
        /// </summary>
        /// <param name="item">Key value pair</param>
        /// <exception cref="NotImplementedException">Method needs to be implemented</exception>
        /// <returns>true if the Multimap contains the item; otherwise, false.</returns>
        public bool Contains(KeyValuePair<TKey, IList<TValue>> item)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        ///  Copy items of the Multimap to an array,
        ///     starting at a particular array index.
        /// </summary>
        /// <param name="array">The array that is the destination of the items copied
        ///     from Multimap. The array must have zero-based indexing.</param>
        /// <param name="arrayIndex">The zero-based index in array at which copying begins.</param>
        /// <exception cref="NotImplementedException">Method needs to be implemented</exception>
        public void CopyTo(KeyValuePair<TKey, IList<TValue>>[] array, int arrayIndex)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Removes the specified item from the Multimap.
        /// </summary>
        /// <param name="item">Key value pair</param>
        /// <returns>true if the item is successfully removed; otherwise, false.</returns>
        /// <exception cref="NotImplementedException">Method needs to be implemented</exception>
        public bool Remove(KeyValuePair<TKey, IList<TValue>> item)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Gets the number of items contained in the Multimap.
        /// </summary>
        public int Count => _dictionary.Count;

        /// <summary>
        /// Gets a value indicating whether the Multimap is read-only.
        /// </summary>
        public bool IsReadOnly => false;

        /// <summary>
        /// Adds an item with the provided key and value to the Multimap.
        /// </summary>
        /// <param name="key">The object to use as the key of the item to add.</param>
        /// <param name="value">The object to use as the value of the item to add.</param>
        /// <exception cref="InvalidOperationException">Thrown when couldn't add the value to Multimap.</exception>
        public void Add(TKey key, IList<TValue> value)
        {
            if (value != null && value.Count > 0)
            {
                if (_dictionary.TryGetValue(key, out var list))
                {
                    foreach (var k in value) list.Add(k);
                }
                else
                {
                    list = new List<TValue>(value);
                    if (!TryAdd(key, list))
                        throw new InvalidOperationException("Could not add values to Multimap.");
                }
            }
        }

        /// <summary>
        /// Determines whether the Multimap contains an item with the specified key.
        /// </summary>
        /// <param name="key">The key to locate in the Multimap.</param>
        /// <returns>true if the Multimap contains an item with
        ///     the key; otherwise, false.</returns>
        public bool ContainsKey(TKey key)
        {
            return _dictionary.ContainsKey(key);
        }

        /// <summary>
        /// Removes item with the specified key from the Multimap.
        /// </summary>
        /// <param name="key">The key to locate in the Multimap.</param>
        /// <returns>true if the item is successfully removed; otherwise, false.</returns>
        public bool Remove(TKey key)
        {
            return TryRemove(key, out var _);
        }

        /// <summary>
        /// Gets the value associated with the specified key.
        /// </summary>
        /// <param name="key">The key whose value to get.</param>
        /// <param name="value">When this method returns, the value associated with the specified key, if the
        ///     key is found; otherwise, the default value for the type of the value parameter.
        ///     This parameter is passed uninitialized.</param>
        /// <returns> true if the object that implements Multimap contains
        ///     an item with the specified key; otherwise, false.</returns>
        public bool TryGetValue(TKey key, out IList<TValue> value)
        {
            return _dictionary.TryGetValue(key, out value);
        }

        /// <summary>
        /// Gets or sets the item with the specified key.
        /// </summary>
        /// <param name="key">The key of the item to get or set.</param>
        /// <returns>The value of the specified key.</returns>
        public IList<TValue> this[TKey key]
        {
            get => _dictionary[key];
            set => _dictionary[key] = value;
        }

        /// <summary>
        /// Gets a System.Collections.Generic.ICollection containing the keys of the Multimap.
        /// </summary>
        public ICollection<TKey> Keys => _dictionary.Keys;

        /// <summary>
        /// Gets a System.Collections.Generic.ICollection containing the values of the Multimap.
        /// </summary>
        public ICollection<IList<TValue>> Values => _dictionary.Values;

        /// <summary>
        ///  Copy the items of the Multimap to an System.Array,
        ///     starting at a particular System.Array index.
        /// </summary>
        /// <param name="array">The one-dimensional System.Array that is the destination of the items copied
        ///     from Multimap. The System.Array must have zero-based indexing.</param>
        /// <param name="index">The zero-based index in array at which copying begins.</param>
        public void CopyTo(Array array, int index)
        {
            ((ICollection)_dictionary).CopyTo(array, index);
        }

        /// <summary>
        /// Adds an item with the provided key and value to the Multimap.
        /// </summary>
        /// <param name="key">The object to use as the key of the item to add.</param>
        /// <param name="value">The object to use as the value of the item to add.</param>
        /// <exception cref="InvalidOperationException">Thrown when couldn't add value to Multimap.</exception>
        public void Add(TKey key, TValue value)
        {
            if (value != null)
            {
                if (_dictionary.TryGetValue(key, out var list))
                {
                    list.Add(value);
                }
                else
                {
                    list = new List<TValue> { value };
                    if (!TryAdd(key, list))
                        throw new InvalidOperationException("Could not add value to Multimap.");
                }
            }
        }

        #endregion Public Members

        #region Private Members

        /**
         * Helper method to encapsulate generator differences between dictionary types.
         */
        private bool TryRemove(TKey key, out IList<TValue> value)
        {
            _dictionary.TryGetValue(key, out value);
            return _dictionary.Remove(key);
        }

        /**
         * Helper method to encapsulate generator differences between dictionary types.
         */
        private bool TryAdd(TKey key, IList<TValue> value)
        {
            try
            {
                _dictionary.Add(key, value);
            }
            catch (ArgumentException)
            {
                return false;
            }

            return true;
        }
        #endregion Private Members
    }
}

src/mailslurp/Client/ISynchronousClient.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.IO;

namespace mailslurp.Client
{
    /// <summary>
    /// Contract for Synchronous RESTful API interactions.
    ///
    /// This interface allows consumers to provide a custom API accessor client.
    /// </summary>
    public interface ISynchronousClient
    {
        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the GET http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Get<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the POST http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Post<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the PUT http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Put<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the DELETE http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Delete<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the HEAD http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Head<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the OPTIONS http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Options<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);

        /// <summary>
        /// Executes a blocking call to some <paramref name="path"/> using the PATCH http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>The response data, decorated with <see cref="ApiResponse{T}"/></returns>
        ApiResponse<T> Patch<T>(string path, RequestOptions options, IReadableConfiguration configuration = null);
    }
}

src/mailslurp/Client/IReadableConfiguration.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Net;
using System.Security.Cryptography.X509Certificates;

namespace mailslurp.Client
{
    /// <summary>
    /// Represents a readable-only configuration contract.
    /// </summary>
    public interface IReadableConfiguration
    {
        /// <summary>
        /// Gets the access token.
        /// </summary>
        /// <value>Access token.</value>
        string AccessToken { get; }

        /// <summary>
        /// Gets the API key.
        /// </summary>
        /// <value>API key.</value>
        IDictionary<string, string> ApiKey { get; }

        /// <summary>
        /// Gets the API key prefix.
        /// </summary>
        /// <value>API key prefix.</value>
        IDictionary<string, string> ApiKeyPrefix { get; }

        /// <summary>
        /// Gets the base path.
        /// </summary>
        /// <value>Base path.</value>
        string BasePath { get; }

        /// <summary>
        /// Gets the date time format.
        /// </summary>
        /// <value>Date time format.</value>
        string DateTimeFormat { get; }

        /// <summary>
        /// Gets the default header.
        /// </summary>
        /// <value>Default header.</value>
        [Obsolete("Use DefaultHeaders instead.")]
        IDictionary<string, string> DefaultHeader { get; }

        /// <summary>
        /// Gets the default headers.
        /// </summary>
        /// <value>Default headers.</value>
        IDictionary<string, string> DefaultHeaders { get; }

        /// <summary>
        /// Gets the temp folder path.
        /// </summary>
        /// <value>Temp folder path.</value>
        string TempFolderPath { get; }

        /// <summary>
        /// Gets the HTTP connection timeout (in milliseconds)
        /// </summary>
        /// <value>HTTP connection timeout.</value>
        int Timeout { get; }

        /// <summary>
        /// Gets the proxy.
        /// </summary>
        /// <value>Proxy.</value>
        WebProxy Proxy { get; }

        /// <summary>
        /// Gets the user agent.
        /// </summary>
        /// <value>User agent.</value>
        string UserAgent { get; }

        /// <summary>
        /// Gets the username.
        /// </summary>
        /// <value>Username.</value>
        string Username { get; }

        /// <summary>
        /// Gets the password.
        /// </summary>
        /// <value>Password.</value>
        string Password { get; }

        /// <summary>
        /// Get the servers associated with the operation.
        /// </summary>
        /// <value>Operation servers.</value>
        IReadOnlyDictionary<string, List<IReadOnlyDictionary<string, object>>> OperationServers { get; }

        /// <summary>
        /// Gets the API key with prefix.
        /// </summary>
        /// <param name="apiKeyIdentifier">API key identifier (authentication scheme).</param>
        /// <returns>API key with prefix.</returns>
        string GetApiKeyWithPrefix(string apiKeyIdentifier);

        /// <summary>
        /// Gets the Operation server url at the provided index.
        /// </summary>
        /// <param name="operation">Operation server name.</param>
        /// <param name="index">Index of the operation server settings.</param>
        /// <returns></returns>
        string GetOperationServerUrl(string operation, int index);

        /// <summary>
        /// Gets certificate collection to be sent with requests.
        /// </summary>
        /// <value>X509 Certificate collection.</value>
        X509CertificateCollection ClientCertificates { get; }
    }
}

src/mailslurp/Client/IAsynchronousClient.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Threading.Tasks;

namespace mailslurp.Client
{
    /// <summary>
    /// Contract for Asynchronous RESTful API interactions.
    ///
    /// This interface allows consumers to provide a custom API accessor client.
    /// </summary>
    public interface IAsynchronousClient
    {
        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the GET http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> GetAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the POST http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> PostAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the PUT http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> PutAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the DELETE http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> DeleteAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the HEAD http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> HeadAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the OPTIONS http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> OptionsAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Executes a non-blocking call to some <paramref name="path"/> using the PATCH http verb.
        /// </summary>
        /// <param name="path">The relative path to invoke.</param>
        /// <param name="options">The request parameters to pass along to the client.</param>
        /// <param name="configuration">Per-request configurable settings.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <typeparam name="T">The return type.</typeparam>
        /// <returns>A task eventually representing the response data, decorated with <see cref="ApiResponse{T}"/></returns>
        Task<ApiResponse<T>> PatchAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
    }
}

src/mailslurp/Client/IApiAccessor.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;

namespace mailslurp.Client
{
    /// <summary>
    /// Represents configuration aspects required to interact with the API endpoints.
    /// </summary>
    public interface IApiAccessor
    {
        /// <summary>
        /// Gets or sets the configuration object
        /// </summary>
        /// <value>An instance of the Configuration</value>
        IReadableConfiguration Configuration { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        string GetBasePath();

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        ExceptionFactory ExceptionFactory { get; set; }
    }
}

src/mailslurp/Client/HttpMethod.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


namespace mailslurp.Client
{
    /// <summary>
    /// Http methods supported by swagger
    /// </summary>
    public enum HttpMethod
    {
        /// <summary>HTTP GET request.</summary>
        Get,
        /// <summary>HTTP POST request.</summary>
        Post,
        /// <summary>HTTP PUT request.</summary>
        Put,
        /// <summary>HTTP DELETE request.</summary>
        Delete,
        /// <summary>HTTP HEAD request.</summary>
        Head,
        /// <summary>HTTP OPTIONS request.</summary>
        Options,
        /// <summary>HTTP PATCH request.</summary>
        Patch
    }
}

src/mailslurp/Client/GlobalConfiguration.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System.Collections.Generic;

namespace mailslurp.Client
{
    /// <summary>
    /// <see cref="GlobalConfiguration"/> provides a compile-time extension point for globally configuring
    /// API Clients.
    /// </summary>
    /// <remarks>
    /// A customized implementation via partial class may reside in another file and may
    /// be excluded from automatic generation via a .openapi-generator-ignore file.
    /// </remarks>
    public partial class GlobalConfiguration : Configuration
    {
        #region Private Members

        private static readonly object GlobalConfigSync = new { };
        private static IReadableConfiguration _globalConfiguration;

        #endregion Private Members

        #region Constructors

        /// <inheritdoc />
        private GlobalConfiguration()
        {
        }

        /// <inheritdoc />
        public GlobalConfiguration(IDictionary<string, string> defaultHeader, IDictionary<string, string> apiKey, IDictionary<string, string> apiKeyPrefix, string basePath = "http://localhost:3000/api") : base(defaultHeader, apiKey, apiKeyPrefix, basePath)
        {
        }

        static GlobalConfiguration()
        {
            Instance = new GlobalConfiguration();
        }

        #endregion Constructors

        /// <summary>
        /// Gets or sets the default Configuration.
        /// </summary>
        /// <value>Configuration.</value>
        public static IReadableConfiguration Instance
        {
            get { return _globalConfiguration; }
            set
            {
                lock (GlobalConfigSync)
                {
                    _globalConfiguration = value;
                }
            }
        }
    }
}

src/mailslurp/Client/ExceptionFactory.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;

namespace mailslurp.Client
{
    /// <summary>
    /// A delegate to ExceptionFactory method
    /// </summary>
    /// <param name="methodName">Method name</param>
    /// <param name="response">Response</param>
    /// <returns>Exceptions</returns>
    public delegate Exception ExceptionFactory(string methodName, IApiResponse response);
}

src/mailslurp/Client/Configuration.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Net.Http;

namespace mailslurp.Client
{
    /// <summary>
    /// Represents a set of configuration settings
    /// </summary>
    public class Configuration : IReadableConfiguration
    {
        #region Constants

        /// <summary>
        /// Version of the package.
        /// </summary>
        /// <value>Version of the package.</value>
        public const string Version = "15.19.22";

        /// <summary>
        /// Identifier for ISO 8601 DateTime Format
        /// </summary>
        /// <remarks>See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information.</remarks>
        // ReSharper disable once InconsistentNaming
        public const string ISO8601_DATETIME_FORMAT = "o";

        #endregion Constants

        #region Static Members

        /// <summary>
        /// Default creation of exceptions for a given method name and response object
        /// </summary>
        public static readonly ExceptionFactory DefaultExceptionFactory = (methodName, response) =>
        {
            var status = (int)response.StatusCode;
            if (status >= 400)
            {
                return new ApiException(status,
                    string.Format("Error calling {0}: {1}", methodName, response.RawContent),
                    response.RawContent, response.Headers);
            }
            if (status == 0)
            {
                return new ApiException(status,
                    string.Format("Error calling {0}: {1}", methodName, response.ErrorText), response.ErrorText);
            }
            return null;
        };

        #endregion Static Members

        #region Private Members

        /// <summary>
        /// Defines the base path of the target API server.
        /// Example: http://localhost:3000/v1/
        /// </summary>
        private string _basePath;

        /// <summary>
        /// Gets or sets the API key based on the authentication name.
        /// This is the key and value comprising the "secret" for accessing an API.
        /// </summary>
        /// <value>The API key.</value>
        private IDictionary<string, string> _apiKey;

        /// <summary>
        /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name.
        /// </summary>
        /// <value>The prefix of the API key.</value>
        private IDictionary<string, string> _apiKeyPrefix;

        private string _dateTimeFormat = ISO8601_DATETIME_FORMAT;
        private string _tempFolderPath = Path.GetTempPath();

        /// <summary>
        /// Gets or sets the servers defined in the OpenAPI spec.
        /// </summary>
        /// <value>The servers</value>
        private IList<IReadOnlyDictionary<string, object>> _servers;

        /// <summary>
        /// Gets or sets the operation servers defined in the OpenAPI spec.
        /// </summary>
        /// <value>The operation servers</value>
        private IReadOnlyDictionary<string, List<IReadOnlyDictionary<string, object>>> _operationServers;

        #endregion Private Members

        #region Constructors

        /// <summary>
        /// Initializes a new instance of the <see cref="Configuration" /> class
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")]
        public Configuration()
        {
            Proxy = null;
            UserAgent = WebUtility.UrlEncode("OpenAPI-Generator/15.19.22/csharp");
            BasePath = "https://csharp.api.mailslurp.com";
            DefaultHeaders = new ConcurrentDictionary<string, string>();
            ApiKey = new ConcurrentDictionary<string, string>();
            ApiKeyPrefix = new ConcurrentDictionary<string, string>();
            Servers = new List<IReadOnlyDictionary<string, object>>()
            {
                {
                    new Dictionary<string, object> {
                        {"url", "https://csharp.api.mailslurp.com"},
                        {"description", "MailSlurp API Server"},
                    }
                }
            };
            OperationServers = new Dictionary<string, List<IReadOnlyDictionary<string, object>>>()
            {
            };

            // Setting Timeout has side effects (forces ApiClient creation).
            Timeout = 100000;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="Configuration" /> class
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")]
        public Configuration(
            IDictionary<string, string> defaultHeaders,
            IDictionary<string, string> apiKey,
            IDictionary<string, string> apiKeyPrefix,
            string basePath = "https://csharp.api.mailslurp.com") : this()
        {
            if (string.IsNullOrWhiteSpace(basePath))
                throw new ArgumentException("The provided basePath is invalid.", "basePath");
            if (defaultHeaders == null)
                throw new ArgumentNullException("defaultHeaders");
            if (apiKey == null)
                throw new ArgumentNullException("apiKey");
            if (apiKeyPrefix == null)
                throw new ArgumentNullException("apiKeyPrefix");

            BasePath = basePath;

            foreach (var keyValuePair in defaultHeaders)
            {
                DefaultHeaders.Add(keyValuePair);
            }

            foreach (var keyValuePair in apiKey)
            {
                ApiKey.Add(keyValuePair);
            }

            foreach (var keyValuePair in apiKeyPrefix)
            {
                ApiKeyPrefix.Add(keyValuePair);
            }
        }

        #endregion Constructors

        #region Properties

        /// <summary>
        /// Gets or sets the base path for API access.
        /// </summary>
        public virtual string BasePath {
            get { return _basePath; }
            set { _basePath = value; }
        }

        /// <summary>
        /// Gets or sets the default header.
        /// </summary>
        [Obsolete("Use DefaultHeaders instead.")]
        public virtual IDictionary<string, string> DefaultHeader
        {
            get
            {
                return DefaultHeaders;
            }
            set
            {
                DefaultHeaders = value;
            }
        }

        /// <summary>
        /// Gets or sets the default headers.
        /// </summary>
        public virtual IDictionary<string, string> DefaultHeaders { get; set; }

        /// <summary>
        /// Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds.
        /// </summary>
        public virtual int Timeout { get; set; }

        /// <summary>
        /// Gets or sets the proxy
        /// </summary>
        /// <value>Proxy.</value>
        public virtual WebProxy Proxy { get; set; }

        /// <summary>
        /// Gets or sets the HTTP user agent.
        /// </summary>
        /// <value>Http user agent.</value>
        public virtual string UserAgent { get; set; }

        /// <summary>
        /// Gets or sets the username (HTTP basic authentication).
        /// </summary>
        /// <value>The username.</value>
        public virtual string Username { get; set; }

        /// <summary>
        /// Gets or sets the password (HTTP basic authentication).
        /// </summary>
        /// <value>The password.</value>
        public virtual string Password { get; set; }

        /// <summary>
        /// Gets the API key with prefix.
        /// </summary>
        /// <param name="apiKeyIdentifier">API key identifier (authentication scheme).</param>
        /// <returns>API key with prefix.</returns>
        public string GetApiKeyWithPrefix(string apiKeyIdentifier)
        {
            string apiKeyValue;
            ApiKey.TryGetValue(apiKeyIdentifier, out apiKeyValue);
            string apiKeyPrefix;
            if (ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix))
            {
                return apiKeyPrefix + " " + apiKeyValue;
            }

            return apiKeyValue;
        }

        /// <summary>
        /// Gets or sets certificate collection to be sent with requests.
        /// </summary>
        /// <value>X509 Certificate collection.</value>
        public X509CertificateCollection ClientCertificates { get; set; }

        /// <summary>
        /// Gets or sets the access token for OAuth2 authentication.
        ///
        /// This helper property simplifies code generation.
        /// </summary>
        /// <value>The access token.</value>
        public virtual string AccessToken { get; set; }

        /// <summary>
        /// Gets or sets the temporary folder path to store the files downloaded from the server.
        /// </summary>
        /// <value>Folder path.</value>
        public virtual string TempFolderPath
        {
            get { return _tempFolderPath; }

            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    _tempFolderPath = Path.GetTempPath();
                    return;
                }

                // create the directory if it does not exist
                if (!Directory.Exists(value))
                {
                    Directory.CreateDirectory(value);
                }

                // check if the path contains directory separator at the end
                if (value[value.Length - 1] == Path.DirectorySeparatorChar)
                {
                    _tempFolderPath = value;
                }
                else
                {
                    _tempFolderPath = value + Path.DirectorySeparatorChar;
                }
            }
        }

        /// <summary>
        /// Gets or sets the date time format used when serializing in the ApiClient
        /// By default, it's set to ISO 8601 - "o", for others see:
        /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx
        /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
        /// No validation is done to ensure that the string you're providing is valid
        /// </summary>
        /// <value>The DateTimeFormat string</value>
        public virtual string DateTimeFormat
        {
            get { return _dateTimeFormat; }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    // Never allow a blank or null string, go back to the default
                    _dateTimeFormat = ISO8601_DATETIME_FORMAT;
                    return;
                }

                // Caution, no validation when you choose date time format other than ISO 8601
                // Take a look at the above links
                _dateTimeFormat = value;
            }
        }

        /// <summary>
        /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name.
        ///
        /// Whatever you set here will be prepended to the value defined in AddApiKey.
        ///
        /// An example invocation here might be:
        /// <example>
        /// ApiKeyPrefix["Authorization"] = "Bearer";
        /// </example>
        /// … where ApiKey["Authorization"] would then be used to set the value of your bearer token.
        ///
        /// <remarks>
        /// OAuth2 workflows should set tokens via AccessToken.
        /// </remarks>
        /// </summary>
        /// <value>The prefix of the API key.</value>
        public virtual IDictionary<string, string> ApiKeyPrefix
        {
            get { return _apiKeyPrefix; }
            set
            {
                if (value == null)
                {
                    throw new InvalidOperationException("ApiKeyPrefix collection may not be null.");
                }
                _apiKeyPrefix = value;
            }
        }

        /// <summary>
        /// Gets or sets the API key based on the authentication name.
        /// </summary>
        /// <value>The API key.</value>
        public virtual IDictionary<string, string> ApiKey
        {
            get { return _apiKey; }
            set
            {
                if (value == null)
                {
                    throw new InvalidOperationException("ApiKey collection may not be null.");
                }
                _apiKey = value;
            }
        }

        /// <summary>
        /// Gets or sets the servers.
        /// </summary>
        /// <value>The servers.</value>
        public virtual IList<IReadOnlyDictionary<string, object>> Servers
        {
            get { return _servers; }
            set
            {
                if (value == null)
                {
                    throw new InvalidOperationException("Servers may not be null.");
                }
                _servers = value;
            }
        }

        /// <summary>
        /// Gets or sets the operation servers.
        /// </summary>
        /// <value>The operation servers.</value>
        public virtual IReadOnlyDictionary<string, List<IReadOnlyDictionary<string, object>>> OperationServers
        {
            get { return _operationServers; }
            set
            {
                if (value == null)
                {
                    throw new InvalidOperationException("Operation servers may not be null.");
                }
                _operationServers = value;
            }
        }

        /// <summary>
        /// Returns URL based on server settings without providing values
        /// for the variables
        /// </summary>
        /// <param name="index">Array index of the server settings.</param>
        /// <return>The server URL.</return>
        public string GetServerUrl(int index)
        {
            return GetServerUrl(Servers, index, null);
        }

        /// <summary>
        /// Returns URL based on server settings.
        /// </summary>
        /// <param name="index">Array index of the server settings.</param>
        /// <param name="inputVariables">Dictionary of the variables and the corresponding values.</param>
        /// <return>The server URL.</return>
        public string GetServerUrl(int index, Dictionary<string, string> inputVariables)
        {
            return GetServerUrl(Servers, index, inputVariables);
        }

        /// <summary>
        /// Returns URL based on operation server settings.
        /// </summary>
        /// <param name="operation">Operation associated with the request path.</param>
        /// <param name="index">Array index of the server settings.</param>
        /// <return>The operation server URL.</return>
        public string GetOperationServerUrl(string operation, int index)
        {
            return GetOperationServerUrl(operation, index, null);
        }

        /// <summary>
        /// Returns URL based on operation server settings.
        /// </summary>
        /// <param name="operation">Operation associated with the request path.</param>
        /// <param name="index">Array index of the server settings.</param>
        /// <param name="inputVariables">Dictionary of the variables and the corresponding values.</param>
        /// <return>The operation server URL.</return>
        public string GetOperationServerUrl(string operation, int index, Dictionary<string, string> inputVariables)
        {
            if (OperationServers.TryGetValue(operation, out var operationServer))
            {
                return GetServerUrl(operationServer, index, inputVariables);
            }

            return null;
        }

        /// <summary>
        /// Returns URL based on server settings.
        /// </summary>
        /// <param name="servers">Dictionary of server settings.</param>
        /// <param name="index">Array index of the server settings.</param>
        /// <param name="inputVariables">Dictionary of the variables and the corresponding values.</param>
        /// <return>The server URL.</return>
        private string GetServerUrl(IList<IReadOnlyDictionary<string, object>> servers, int index, Dictionary<string, string> inputVariables)
        {
            if (index < 0 || index >= servers.Count)
            {
                throw new InvalidOperationException($"Invalid index {index} when selecting the server. Must be less than {servers.Count}.");
            }

            if (inputVariables == null)
            {
                inputVariables = new Dictionary<string, string>();
            }

            IReadOnlyDictionary<string, object> server = servers[index];
            string url = (string)server["url"];

            if (server.ContainsKey("variables"))
            {
                // go through each variable and assign a value
                foreach (KeyValuePair<string, object> variable in (IReadOnlyDictionary<string, object>)server["variables"])
                {

                    IReadOnlyDictionary<string, object> serverVariables = (IReadOnlyDictionary<string, object>)(variable.Value);

                    if (inputVariables.ContainsKey(variable.Key))
                    {
                        if (((List<string>)serverVariables["enum_values"]).Contains(inputVariables[variable.Key]))
                        {
                            url = url.Replace("{" + variable.Key + "}", inputVariables[variable.Key]);
                        }
                        else
                        {
                            throw new InvalidOperationException($"The variable `{variable.Key}` in the server URL has invalid value #{inputVariables[variable.Key]}. Must be {(List<string>)serverVariables["enum_values"]}");
                        }
                    }
                    else
                    {
                        // use default value
                        url = url.Replace("{" + variable.Key + "}", (string)serverVariables["default_value"]);
                    }
                }
            }

            return url;
        }

        #endregion Properties

        #region Methods

        /// <summary>
        /// Returns a string with essential information for debugging.
        /// </summary>
        public static string ToDebugReport()
        {
            string report = "C# SDK (mailslurp) Debug Report:\n";
            report += "    OS: " + System.Environment.OSVersion + "\n";
            report += "    .NET Framework Version: " + System.Environment.Version  + "\n";
            report += "    Version of the API: 6.5.2\n";
            report += "    SDK Package Version: 15.19.22\n";

            return report;
        }

        /// <summary>
        /// Add Api Key Header.
        /// </summary>
        /// <param name="key">Api Key name.</param>
        /// <param name="value">Api Key value.</param>
        /// <returns></returns>
        public void AddApiKey(string key, string value)
        {
            ApiKey[key] = value;
        }

        /// <summary>
        /// Sets the API key prefix.
        /// </summary>
        /// <param name="key">Api Key name.</param>
        /// <param name="value">Api Key value.</param>
        public void AddApiKeyPrefix(string key, string value)
        {
            ApiKeyPrefix[key] = value;
        }

        #endregion Methods

        #region Static Members
        /// <summary>
        /// Merge configurations.
        /// </summary>
        /// <param name="first">First configuration.</param>
        /// <param name="second">Second configuration.</param>
        /// <return>Merged configuration.</return>
        public static IReadableConfiguration MergeConfigurations(IReadableConfiguration first, IReadableConfiguration second)
        {
            if (second == null) return first ?? GlobalConfiguration.Instance;

            Dictionary<string, string> apiKey = first.ApiKey.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            Dictionary<string, string> apiKeyPrefix = first.ApiKeyPrefix.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            Dictionary<string, string> defaultHeaders = first.DefaultHeaders.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            foreach (var kvp in second.ApiKey) apiKey[kvp.Key] = kvp.Value;
            foreach (var kvp in second.ApiKeyPrefix) apiKeyPrefix[kvp.Key] = kvp.Value;
            foreach (var kvp in second.DefaultHeaders) defaultHeaders[kvp.Key] = kvp.Value;

            var config = new Configuration
            {
                ApiKey = apiKey,
                ApiKeyPrefix = apiKeyPrefix,
                DefaultHeaders = defaultHeaders,
                BasePath = second.BasePath ?? first.BasePath,
                Timeout = second.Timeout,
                Proxy = second.Proxy ?? first.Proxy,
                UserAgent = second.UserAgent ?? first.UserAgent,
                Username = second.Username ?? first.Username,
                Password = second.Password ?? first.Password,
                AccessToken = second.AccessToken ?? first.AccessToken,
                TempFolderPath = second.TempFolderPath ?? first.TempFolderPath,
                DateTimeFormat = second.DateTimeFormat ?? first.DateTimeFormat,
                ClientCertificates = second.ClientCertificates ?? first.ClientCertificates,
            };
            return config;
        }
        #endregion Static Members
    }
}

src/mailslurp/Client/ClientUtils.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;

namespace mailslurp.Client
{
    /// <summary>
    /// Utility functions providing some benefit to API client consumers.
    /// </summary>
    public static class ClientUtils
    {
        /// <summary>
        /// Sanitize filename by removing the path
        /// </summary>
        /// <param name="filename">Filename</param>
        /// <returns>Filename</returns>
        public static string SanitizeFilename(string filename)
        {
            Match match = Regex.Match(filename, @".*[/\\](.*)$");
            return match.Success ? match.Groups[1].Value : filename;
        }

        /// <summary>
        /// Convert params to key/value pairs.
        /// Use collectionFormat to properly format lists and collections.
        /// </summary>
        /// <param name="collectionFormat">The swagger-supported collection format, one of: csv, tsv, ssv, pipes, multi</param>
        /// <param name="name">Key name.</param>
        /// <param name="value">Value object.</param>
        /// <returns>A multimap of keys with 1..n associated values.</returns>
        public static Multimap<string, string> ParameterToMultiMap(string collectionFormat, string name, object value)
        {
            var parameters = new Multimap<string, string>();

            if (value is ICollection collection && collectionFormat == "multi")
            {
                foreach (var item in collection)
                {
                    parameters.Add(name, ParameterToString(item));
                }
            }
            else if (value is IDictionary dictionary)
            {
                if(collectionFormat == "deepObject") {
                    foreach (DictionaryEntry entry in dictionary)
                    {
                        parameters.Add(name + "[" + entry.Key + "]", ParameterToString(entry.Value));
                    }
                }
                else {
                    foreach (DictionaryEntry entry in dictionary)
                    {
                        parameters.Add(entry.Key.ToString(), ParameterToString(entry.Value));
                    }
                }
            }
            else
            {
                parameters.Add(name, ParameterToString(value));
            }

            return parameters;
        }

        /// <summary>
        /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime.
        /// If parameter is a list, join the list with ",".
        /// Otherwise just return the string.
        /// </summary>
        /// <param name="obj">The parameter (header, path, query, form).</param>
        /// <param name="configuration">An optional configuration instance, providing formatting options used in processing.</param>
        /// <returns>Formatted string.</returns>
        public static string ParameterToString(object obj, IReadableConfiguration configuration = null)
        {
            if (obj is DateTime dateTime)
                // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
                // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
                // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
                // For example: 2009-06-15T13:45:30.0000000
                return dateTime.ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat);
            if (obj is DateTimeOffset dateTimeOffset)
                // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
                // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
                // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
                // For example: 2009-06-15T13:45:30.0000000
                return dateTimeOffset.ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat);
            if (obj is bool boolean)
                return boolean ? "true" : "false";
            if (obj is ICollection collection)
                return string.Join(",", collection.Cast<object>());
            if (obj is Enum && HasEnumMemberAttrValue(obj))
                return GetEnumMemberAttrValue(obj);

            return Convert.ToString(obj, CultureInfo.InvariantCulture);
        }

        /// <summary>
        /// Serializes the given object when not null. Otherwise return null.
        /// </summary>
        /// <param name="obj">The object to serialize.</param>
        /// <returns>Serialized string.</returns>
        public static string Serialize(object obj)
        {
            return obj != null ? Newtonsoft.Json.JsonConvert.SerializeObject(obj) : null;
        }

        /// <summary>
        /// Encode string in base64 format.
        /// </summary>
        /// <param name="text">string to be encoded.</param>
        /// <returns>Encoded string.</returns>
        public static string Base64Encode(string text)
        {
            return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text));
        }

        /// <summary>
        /// Convert stream to byte array
        /// </summary>
        /// <param name="inputStream">Input stream to be converted</param>
        /// <returns>Byte array</returns>
        public static byte[] ReadAsBytes(Stream inputStream)
        {
            using (var ms = new MemoryStream())
            {
                inputStream.CopyTo(ms);
                return ms.ToArray();
            }
        }

        /// <summary>
        /// Select the Content-Type header's value from the given content-type array:
        /// if JSON type exists in the given array, use it;
        /// otherwise use the first one defined in 'consumes'
        /// </summary>
        /// <param name="contentTypes">The Content-Type array to select from.</param>
        /// <returns>The Content-Type header to use.</returns>
        public static string SelectHeaderContentType(string[] contentTypes)
        {
            if (contentTypes.Length == 0)
                return null;

            foreach (var contentType in contentTypes)
            {
                if (IsJsonMime(contentType))
                    return contentType;
            }

            return contentTypes[0]; // use the first content type specified in 'consumes'
        }

        /// <summary>
        /// Select the Accept header's value from the given accepts array:
        /// if JSON exists in the given array, use it;
        /// otherwise use all of them (joining into a string)
        /// </summary>
        /// <param name="accepts">The accepts array to select from.</param>
        /// <returns>The Accept header to use.</returns>
        public static string SelectHeaderAccept(string[] accepts)
        {
            if (accepts.Length == 0)
                return null;

            if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase))
                return "application/json";

            return string.Join(",", accepts);
        }

        /// <summary>
        /// Provides a case-insensitive check that a provided content type is a known JSON-like content type.
        /// </summary>
        public static readonly Regex JsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");

        /// <summary>
        /// Check if the given MIME is a JSON MIME.
        /// JSON MIME examples:
        ///    application/json
        ///    application/json; charset=UTF8
        ///    APPLICATION/JSON
        ///    application/vnd.company+json
        /// </summary>
        /// <param name="mime">MIME</param>
        /// <returns>Returns True if MIME type is json.</returns>
        public static bool IsJsonMime(string mime)
        {
            if (string.IsNullOrWhiteSpace(mime)) return false;

            return JsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json");
        }

        /// <summary>
        /// Is the Enum decorated with EnumMember Attribute
        /// </summary>
        /// <param name="enumVal"></param>
        /// <returns>true if found</returns>
        private static bool HasEnumMemberAttrValue(object enumVal)
        {
            if (enumVal == null)
                throw new ArgumentNullException(nameof(enumVal));
            var enumType = enumVal.GetType();
            var memInfo = enumType.GetMember(enumVal.ToString() ?? throw new InvalidOperationException());
            var attr = memInfo.FirstOrDefault()?.GetCustomAttributes(false).OfType<EnumMemberAttribute>().FirstOrDefault();
            if (attr != null) return true;
                return false;
        }

        /// <summary>
        /// Get the EnumMember value
        /// </summary>
        /// <param name="enumVal"></param>
        /// <returns>EnumMember value as string otherwise null</returns>
        private static string GetEnumMemberAttrValue(object enumVal)
        {
            if (enumVal == null)
                throw new ArgumentNullException(nameof(enumVal));
            var enumType = enumVal.GetType();
            var memInfo = enumType.GetMember(enumVal.ToString() ?? throw new InvalidOperationException());
            var attr = memInfo.FirstOrDefault()?.GetCustomAttributes(false).OfType<EnumMemberAttribute>().FirstOrDefault();
            if (attr != null)
            {
                return attr.Value;
            }
            return null;
        }
    }
}

src/mailslurp/Client/ApiResponse.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Net;

namespace mailslurp.Client
{
    /// <summary>
    /// Provides a non-generic contract for the ApiResponse wrapper.
    /// </summary>
    public interface IApiResponse
    {
        /// <summary>
        /// The data type of <see cref="Content"/>
        /// </summary>
        Type ResponseType { get; }

        /// <summary>
        /// The content of this response
        /// </summary>
        Object Content { get; }

        /// <summary>
        /// Gets or sets the status code (HTTP status code)
        /// </summary>
        /// <value>The status code.</value>
        HttpStatusCode StatusCode { get; }

        /// <summary>
        /// Gets or sets the HTTP headers
        /// </summary>
        /// <value>HTTP headers</value>
        Multimap<string, string> Headers { get; }

        /// <summary>
        /// Gets or sets any error text defined by the calling client.
        /// </summary>
        string ErrorText { get; set; }

        /// <summary>
        /// Gets or sets any cookies passed along on the response.
        /// </summary>
        List<Cookie> Cookies { get; set; }

        /// <summary>
        /// The raw content of this response
        /// </summary>
        string RawContent { get; }
    }

    /// <summary>
    /// API Response
    /// </summary>
    public class ApiResponse<T> : IApiResponse
    {
        #region Properties

        /// <summary>
        /// Gets or sets the status code (HTTP status code)
        /// </summary>
        /// <value>The status code.</value>
        public HttpStatusCode StatusCode { get; }

        /// <summary>
        /// Gets or sets the HTTP headers
        /// </summary>
        /// <value>HTTP headers</value>
        public Multimap<string, string> Headers { get; }

        /// <summary>
        /// Gets or sets the data (parsed HTTP body)
        /// </summary>
        /// <value>The data.</value>
        public T Data { get; }

        /// <summary>
        /// Gets or sets any error text defined by the calling client.
        /// </summary>
        public string ErrorText { get; set; }

        /// <summary>
        /// Gets or sets any cookies passed along on the response.
        /// </summary>
        public List<Cookie> Cookies { get; set; }

        /// <summary>
        /// The content of this response
        /// </summary>
        public Type ResponseType
        {
            get { return typeof(T); }
        }

        /// <summary>
        /// The data type of <see cref="Content"/>
        /// </summary>
        public object Content
        {
            get { return Data; }
        }

        /// <summary>
        /// The raw content
        /// </summary>
        public string RawContent { get; }

        #endregion Properties

        #region Constructors

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
        /// </summary>
        /// <param name="statusCode">HTTP status code.</param>
        /// <param name="headers">HTTP headers.</param>
        /// <param name="data">Data (parsed HTTP body)</param>
        /// <param name="rawContent">Raw content.</param>
        public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data, string rawContent)
        {
            StatusCode = statusCode;
            Headers = headers;
            Data = data;
            RawContent = rawContent;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
        /// </summary>
        /// <param name="statusCode">HTTP status code.</param>
        /// <param name="headers">HTTP headers.</param>
        /// <param name="data">Data (parsed HTTP body)</param>
        public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data) : this(statusCode, headers, data, null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
        /// </summary>
        /// <param name="statusCode">HTTP status code.</param>
        /// <param name="data">Data (parsed HTTP body)</param>
        /// <param name="rawContent">Raw content.</param>
        public ApiResponse(HttpStatusCode statusCode, T data, string rawContent) : this(statusCode, null, data, rawContent)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
        /// </summary>
        /// <param name="statusCode">HTTP status code.</param>
        /// <param name="data">Data (parsed HTTP body)</param>
        public ApiResponse(HttpStatusCode statusCode, T data) : this(statusCode, data, null)
        {
        }

        #endregion Constructors
    }
}

src/mailslurp/Client/ApiException.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;

namespace mailslurp.Client
{
    /// <summary>
    /// API Exception
    /// </summary>
    public class ApiException : Exception
    {
        /// <summary>
        /// Gets or sets the error code (HTTP status code)
        /// </summary>
        /// <value>The error code (HTTP status code).</value>
        public int ErrorCode { get; set; }

        /// <summary>
        /// Gets or sets the error content (body json object)
        /// </summary>
        /// <value>The error content (Http response body).</value>
        public object ErrorContent { get; private set; }

        /// <summary>
        /// Gets or sets the HTTP headers
        /// </summary>
        /// <value>HTTP headers</value>
        public Multimap<string, string> Headers { get; private set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiException"/> class.
        /// </summary>
        public ApiException() { }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiException"/> class.
        /// </summary>
        /// <param name="errorCode">HTTP status code.</param>
        /// <param name="message">Error message.</param>
        public ApiException(int errorCode, string message) : base(message)
        {
            this.ErrorCode = errorCode;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiException"/> class.
        /// </summary>
        /// <param name="errorCode">HTTP status code.</param>
        /// <param name="message">Error message.</param>
        /// <param name="errorContent">Error content.</param>
        /// <param name="headers">HTTP Headers.</param>
        public ApiException(int errorCode, string message, object errorContent = null, Multimap<string, string> headers = null) : base(message)
        {
            this.ErrorCode = errorCode;
            this.ErrorContent = errorContent;
            this.Headers = headers;
        }
    }

}

src/mailslurp/Client/ApiClient.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Text;
using System.Threading;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using RestSharp;
using RestSharp.Serializers;
using RestSharpMethod = RestSharp.Method;
using Polly;

namespace mailslurp.Client
{
    /// <summary>
    /// Allows RestSharp to Serialize/Deserialize JSON using our custom logic, but only when ContentType is JSON.
    /// </summary>
    internal class CustomJsonCodec : IRestSerializer, ISerializer, IDeserializer
    {
        private readonly IReadableConfiguration _configuration;
        private static readonly string _contentType = "application/json";
        private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings
        {
            // OpenAPI generated types generally hide default constructors.
            ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
            ContractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy
                {
                    OverrideSpecifiedNames = false
                }
            }
        };

        public CustomJsonCodec(IReadableConfiguration configuration)
        {
            _configuration = configuration;
        }

        public CustomJsonCodec(JsonSerializerSettings serializerSettings, IReadableConfiguration configuration)
        {
            _serializerSettings = serializerSettings;
            _configuration = configuration;
        }

        /// <summary>
        /// Serialize the object into a JSON string.
        /// </summary>
        /// <param name="obj">Object to be serialized.</param>
        /// <returns>A JSON string.</returns>
        public string Serialize(object obj)
        {
            if (obj != null && obj is mailslurp.Model.AbstractOpenAPISchema)
            {
                // the object to be serialized is an oneOf/anyOf schema
                return ((mailslurp.Model.AbstractOpenAPISchema)obj).ToJson();
            }
            else
            {
                return JsonConvert.SerializeObject(obj, _serializerSettings);
            }
        }

        public string Serialize(Parameter bodyParameter) => Serialize(bodyParameter.Value);

        public T Deserialize<T>(RestResponse response)
        {
            var result = (T)Deserialize(response, typeof(T));
            return result;
        }

        /// <summary>
        /// Deserialize the JSON string into a proper object.
        /// </summary>
        /// <param name="response">The HTTP response.</param>
        /// <param name="type">Object type.</param>
        /// <returns>Object representation of the JSON string.</returns>
        internal object Deserialize(RestResponse response, Type type)
        {
            if (type == typeof(byte[])) // return byte array
            {
                return response.RawBytes;
            }

            // TODO: ? if (type.IsAssignableFrom(typeof(Stream)))
            if (type == typeof(Stream))
            {
                var bytes = response.RawBytes;
                if (response.Headers != null)
                {
                    var filePath = string.IsNullOrEmpty(_configuration.TempFolderPath)
                        ? Path.GetTempPath()
                        : _configuration.TempFolderPath;
                    var regex = new Regex(@"Content-Disposition=.*filename=['""]?([^'""\s]+)['""]?$");
                    foreach (var header in response.Headers)
                    {
                        var match = regex.Match(header.ToString());
                        if (match.Success)
                        {
                            string fileName = filePath + ClientUtils.SanitizeFilename(match.Groups[1].Value.Replace("\"", "").Replace("'", ""));
                            File.WriteAllBytes(fileName, bytes);
                            return new FileStream(fileName, FileMode.Open);
                        }
                    }
                }
                var stream = new MemoryStream(bytes);
                return stream;
            }

            if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object
            {
                return DateTime.Parse(response.Content, null, System.Globalization.DateTimeStyles.RoundtripKind);
            }

            if (type == typeof(string) || type.Name.StartsWith("System.Nullable")) // return primitive type
            {
                return Convert.ChangeType(response.Content, type);
            }

            // at this point, it must be a model (json)
            try
            {
                return JsonConvert.DeserializeObject(response.Content, type, _serializerSettings);
            }
            catch (Exception e)
            {
                throw new ApiException(500, e.Message);
            }
        }

        public ISerializer Serializer => this;
        public IDeserializer Deserializer => this;

        public string[] AcceptedContentTypes => RestSharp.Serializers.ContentType.JsonAccept;

        public SupportsContentType SupportsContentType => contentType =>
            contentType.EndsWith("json", StringComparison.InvariantCultureIgnoreCase) ||
            contentType.EndsWith("javascript", StringComparison.InvariantCultureIgnoreCase);

        public string ContentType
        {
            get { return _contentType; }
            set { throw new InvalidOperationException("Not allowed to set content type."); }
        }

        public DataFormat DataFormat => DataFormat.Json;
    }
    /// <summary>
    /// Provides a default implementation of an Api client (both synchronous and asynchronous implementations),
    /// encapsulating general REST accessor use cases.
    /// </summary>
    public partial class ApiClient : ISynchronousClient, IAsynchronousClient
    {
        private readonly string _baseUrl;

        /// <summary>
        /// Specifies the settings on a <see cref="JsonSerializer" /> object.
        /// These settings can be adjusted to accommodate custom serialization rules.
        /// </summary>
        public JsonSerializerSettings SerializerSettings { get; set; } = new JsonSerializerSettings
        {
            // OpenAPI generated types generally hide default constructors.
            ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
            ContractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy
                {
                    OverrideSpecifiedNames = false
                }
            }
        };

        /// <summary>
        /// Allows for extending request processing for <see cref="ApiClient"/> generated code.
        /// </summary>
        /// <param name="request">The RestSharp request object</param>
        partial void InterceptRequest(RestRequest request);

        /// <summary>
        /// Allows for extending response processing for <see cref="ApiClient"/> generated code.
        /// </summary>
        /// <param name="request">The RestSharp request object</param>
        /// <param name="response">The RestSharp response object</param>
        partial void InterceptResponse(RestRequest request, RestResponse response);

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiClient" />, defaulting to the global configurations' base url.
        /// </summary>
        public ApiClient()
        {
            _baseUrl = mailslurp.Client.GlobalConfiguration.Instance.BasePath;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiClient" />
        /// </summary>
        /// <param name="basePath">The target service's base path in URL format.</param>
        /// <exception cref="ArgumentException"></exception>
        public ApiClient(string basePath)
        {
            if (string.IsNullOrEmpty(basePath))
                throw new ArgumentException("basePath cannot be empty");

            _baseUrl = basePath;
        }

        /// <summary>
        /// Constructs the RestSharp version of an http method
        /// </summary>
        /// <param name="method">Swagger Client Custom HttpMethod</param>
        /// <returns>RestSharp's HttpMethod instance.</returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        private RestSharpMethod Method(HttpMethod method)
        {
            RestSharpMethod other;
            switch (method)
            {
                case HttpMethod.Get:
                    other = RestSharpMethod.Get;
                    break;
                case HttpMethod.Post:
                    other = RestSharpMethod.Post;
                    break;
                case HttpMethod.Put:
                    other = RestSharpMethod.Put;
                    break;
                case HttpMethod.Delete:
                    other = RestSharpMethod.Delete;
                    break;
                case HttpMethod.Head:
                    other = RestSharpMethod.Head;
                    break;
                case HttpMethod.Options:
                    other = RestSharpMethod.Options;
                    break;
                case HttpMethod.Patch:
                    other = RestSharpMethod.Patch;
                    break;
                default:
                    throw new ArgumentOutOfRangeException("method", method, null);
            }

            return other;
        }

        /// <summary>
        /// Provides all logic for constructing a new RestSharp <see cref="RestRequest"/>.
        /// At this point, all information for querying the service is known. Here, it is simply
        /// mapped into the RestSharp request.
        /// </summary>
        /// <param name="method">The http verb.</param>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>[private] A new RestRequest instance.</returns>
        /// <exception cref="ArgumentNullException"></exception>
        private RestRequest NewRequest(
            HttpMethod method,
            string path,
            RequestOptions options,
            IReadableConfiguration configuration)
        {
            if (path == null) throw new ArgumentNullException("path");
            if (options == null) throw new ArgumentNullException("options");
            if (configuration == null) throw new ArgumentNullException("configuration");

            RestRequest request = new RestRequest(path, Method(method));

            if (options.PathParameters != null)
            {
                foreach (var pathParam in options.PathParameters)
                {
                    request.AddParameter(pathParam.Key, pathParam.Value, ParameterType.UrlSegment);
                }
            }

            if (options.QueryParameters != null)
            {
                foreach (var queryParam in options.QueryParameters)
                {
                    foreach (var value in queryParam.Value)
                    {
                        request.AddQueryParameter(queryParam.Key, value);
                    }
                }
            }

            if (configuration.DefaultHeaders != null)
            {
                foreach (var headerParam in configuration.DefaultHeaders)
                {
                    request.AddHeader(headerParam.Key, headerParam.Value);
                }
            }

            if (options.HeaderParameters != null)
            {
                foreach (var headerParam in options.HeaderParameters)
                {
                    foreach (var value in headerParam.Value)
                    {
                        request.AddHeader(headerParam.Key, value);
                    }
                }
            }

            if (options.FormParameters != null)
            {
                foreach (var formParam in options.FormParameters)
                {
                    request.AddParameter(formParam.Key, formParam.Value);
                }
            }

            if (options.Data != null)
            {
                if (options.Data is Stream stream)
                {
                    var contentType = "application/octet-stream";
                    if (options.HeaderParameters != null)
                    {
                        var contentTypes = options.HeaderParameters["Content-Type"];
                        contentType = contentTypes[0];
                    }

                    var bytes = ClientUtils.ReadAsBytes(stream);
                    request.AddParameter(contentType, bytes, ParameterType.RequestBody);
                }
                else
                {
                    if (options.HeaderParameters != null)
                    {
                        var contentTypes = options.HeaderParameters["Content-Type"];
                        if (contentTypes == null || contentTypes.Any(header => header.Contains("application/json")))
                        {
                            request.RequestFormat = DataFormat.Json;
                        }
                        else
                        {
                            // TODO: Generated client user should add additional handlers. RestSharp only supports XML and JSON, with XML as default.
                        }
                    }
                    else
                    {
                        // Here, we'll assume JSON APIs are more common. XML can be forced by adding produces/consumes to openapi spec explicitly.
                        request.RequestFormat = DataFormat.Json;
                    }

                    request.AddJsonBody(options.Data);
                }
            }

            if (options.FileParameters != null)
            {
                foreach (var fileParam in options.FileParameters)
                {
                    foreach (var file in fileParam.Value)
                    {
                        var bytes = ClientUtils.ReadAsBytes(file);
                        var fileStream = file as FileStream;
                        if (fileStream != null)
                            request.AddFile(fileParam.Key, bytes, System.IO.Path.GetFileName(fileStream.Name));
                        else
                            request.AddFile(fileParam.Key, bytes, "no_file_name_provided");
                    }
                }
            }

            return request;
        }

        private ApiResponse<T> ToApiResponse<T>(RestResponse<T> response)
        {
            T result = response.Data;
            string rawContent = response.Content;

            var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result, rawContent)
            {
                ErrorText = response.ErrorMessage,
                Cookies = new List<Cookie>()
            };

            if (response.Headers != null)
            {
                foreach (var responseHeader in response.Headers)
                {
                    transformed.Headers.Add(responseHeader.Name, ClientUtils.ParameterToString(responseHeader.Value));
                }
            }

            if (response.ContentHeaders != null)
            {
                foreach (var responseHeader in response.ContentHeaders)
                {
                    transformed.Headers.Add(responseHeader.Name, ClientUtils.ParameterToString(responseHeader.Value));
                }
            }

            if (response.Cookies != null)
            {
                foreach (var responseCookies in response.Cookies.Cast<Cookie>())
                {
                    transformed.Cookies.Add(
                        new Cookie(
                            responseCookies.Name,
                            responseCookies.Value,
                            responseCookies.Path,
                            responseCookies.Domain)
                        );
                }
            }

            return transformed;
        }

        private ApiResponse<T> Exec<T>(RestRequest req, RequestOptions options, IReadableConfiguration configuration)
        {
            var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;

            var cookies = new CookieContainer();

            if (options.Cookies != null && options.Cookies.Count > 0)
            {
                foreach (var cookie in options.Cookies)
                {
                    cookies.Add(new Cookie(cookie.Name, cookie.Value));
                }
            }

            var clientOptions = new RestClientOptions(baseUrl)
            {
                ClientCertificates = configuration.ClientCertificates,
                CookieContainer = cookies,
                MaxTimeout = configuration.Timeout,
                Proxy = configuration.Proxy,
                UserAgent = configuration.UserAgent
            };

            RestClient client = new RestClient(clientOptions)
                .UseSerializer(() => new CustomJsonCodec(SerializerSettings, configuration));

            InterceptRequest(req);

            RestResponse<T> response;
            if (RetryConfiguration.RetryPolicy != null)
            {
                var policy = RetryConfiguration.RetryPolicy;
                var policyResult = policy.ExecuteAndCapture(() => client.Execute(req));
                response = (policyResult.Outcome == OutcomeType.Successful) ? client.Deserialize<T>(policyResult.Result) : new RestResponse<T>
                {
                    Request = req,
                    ErrorException = policyResult.FinalException
                };
            }
            else
            {
                response = client.Execute<T>(req);
            }

            // if the response type is oneOf/anyOf, call FromJSON to deserialize the data
            if (typeof(mailslurp.Model.AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
            {
                try
                {
                    response.Data = (T) typeof(T).GetMethod("FromJson").Invoke(null, new object[] { response.Content });
                }
                catch (Exception ex)
                {
                    throw ex.InnerException != null ? ex.InnerException : ex;
                }
            }
            else if (typeof(T).Name == "Stream") // for binary response
            {
                response.Data = (T)(object)new MemoryStream(response.RawBytes);
            }
            else if (typeof(T).Name == "Byte[]") // for byte response
            {
                response.Data = (T)(object)response.RawBytes;
            }
            else if (typeof(T).Name == "String") // for string response
            {
                response.Data = (T)(object)response.Content;
            }

            InterceptResponse(req, response);

            var result = ToApiResponse(response);
            if (response.ErrorMessage != null)
            {
                result.ErrorText = response.ErrorMessage;
            }

            if (response.Cookies != null && response.Cookies.Count > 0)
            {
                if (result.Cookies == null) result.Cookies = new List<Cookie>();
                foreach (var restResponseCookie in response.Cookies.Cast<Cookie>())
                {
                    var cookie = new Cookie(
                        restResponseCookie.Name,
                        restResponseCookie.Value,
                        restResponseCookie.Path,
                        restResponseCookie.Domain
                    )
                    {
                        Comment = restResponseCookie.Comment,
                        CommentUri = restResponseCookie.CommentUri,
                        Discard = restResponseCookie.Discard,
                        Expired = restResponseCookie.Expired,
                        Expires = restResponseCookie.Expires,
                        HttpOnly = restResponseCookie.HttpOnly,
                        Port = restResponseCookie.Port,
                        Secure = restResponseCookie.Secure,
                        Version = restResponseCookie.Version
                    };

                    result.Cookies.Add(cookie);
                }
            }
            return result;
        }

        private async Task<ApiResponse<T>> ExecAsync<T>(RestRequest req, RequestOptions options, IReadableConfiguration configuration, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;

            var clientOptions = new RestClientOptions(baseUrl)
            {
                ClientCertificates = configuration.ClientCertificates,
                MaxTimeout = configuration.Timeout,
                Proxy = configuration.Proxy,
                UserAgent = configuration.UserAgent
            };

            RestClient client = new RestClient(clientOptions)
                .UseSerializer(() => new CustomJsonCodec(SerializerSettings, configuration));

            InterceptRequest(req);

            RestResponse<T> response;
            if (RetryConfiguration.AsyncRetryPolicy != null)
            {
                var policy = RetryConfiguration.AsyncRetryPolicy;
                var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(req, ct), cancellationToken).ConfigureAwait(false);
                response = (policyResult.Outcome == OutcomeType.Successful) ? client.Deserialize<T>(policyResult.Result) : new RestResponse<T>
                {
                    Request = req,
                    ErrorException = policyResult.FinalException
                };
            }
            else
            {
                response = await client.ExecuteAsync<T>(req, cancellationToken).ConfigureAwait(false);
            }

            // if the response type is oneOf/anyOf, call FromJSON to deserialize the data
            if (typeof(mailslurp.Model.AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
            {
                response.Data = (T) typeof(T).GetMethod("FromJson").Invoke(null, new object[] { response.Content });
            }
            else if (typeof(T).Name == "Stream") // for binary response
            {
                response.Data = (T)(object)new MemoryStream(response.RawBytes);
            }
            else if (typeof(T).Name == "Byte[]") // for byte response
            {
                response.Data = (T)(object)response.RawBytes;
            }

            InterceptResponse(req, response);

            var result = ToApiResponse(response);
            if (response.ErrorMessage != null)
            {
                result.ErrorText = response.ErrorMessage;
            }

            if (response.Cookies != null && response.Cookies.Count > 0)
            {
                if (result.Cookies == null) result.Cookies = new List<Cookie>();
                foreach (var restResponseCookie in response.Cookies.Cast<Cookie>())
                {
                    var cookie = new Cookie(
                        restResponseCookie.Name,
                        restResponseCookie.Value,
                        restResponseCookie.Path,
                        restResponseCookie.Domain
                    )
                    {
                        Comment = restResponseCookie.Comment,
                        CommentUri = restResponseCookie.CommentUri,
                        Discard = restResponseCookie.Discard,
                        Expired = restResponseCookie.Expired,
                        Expires = restResponseCookie.Expires,
                        HttpOnly = restResponseCookie.HttpOnly,
                        Port = restResponseCookie.Port,
                        Secure = restResponseCookie.Secure,
                        Version = restResponseCookie.Version
                    };

                    result.Cookies.Add(cookie);
                }
            }
            return result;
        }

        #region IAsynchronousClient
        /// <summary>
        /// Make a HTTP GET request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> GetAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Get, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP POST request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> PostAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Post, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP PUT request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> PutAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Put, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP DELETE request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> DeleteAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Delete, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP HEAD request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> HeadAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Head, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP OPTION request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> OptionsAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Options, path, options, config), options, config, cancellationToken);
        }

        /// <summary>
        /// Make a HTTP PATCH request (async).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <param name="cancellationToken">Token that enables callers to cancel the request.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public Task<ApiResponse<T>> PatchAsync<T>(string path, RequestOptions options, IReadableConfiguration configuration = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return ExecAsync<T>(NewRequest(HttpMethod.Patch, path, options, config), options, config, cancellationToken);
        }
        #endregion IAsynchronousClient

        #region ISynchronousClient
        /// <summary>
        /// Make a HTTP GET request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Get<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Get, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP POST request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Post<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Post, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP PUT request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Put<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Put, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP DELETE request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Delete<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Delete, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP HEAD request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Head<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Head, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP OPTION request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Options<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Options, path, options, config), options, config);
        }

        /// <summary>
        /// Make a HTTP PATCH request (synchronous).
        /// </summary>
        /// <param name="path">The target path (or resource).</param>
        /// <param name="options">The additional request options.</param>
        /// <param name="configuration">A per-request configuration object. It is assumed that any merge with
        /// GlobalConfiguration has been done before calling this method.</param>
        /// <returns>A Task containing ApiResponse</returns>
        public ApiResponse<T> Patch<T>(string path, RequestOptions options, IReadableConfiguration configuration = null)
        {
            var config = configuration ?? GlobalConfiguration.Instance;
            return Exec<T>(NewRequest(HttpMethod.Patch, path, options, config), options, config);
        }
        #endregion ISynchronousClient
    }
}

src/mailslurp/Api/WebhookControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWebhookControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified of account level events such as bounce and bounce recipient.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        WebhookDto CreateAccountWebhook(CreateWebhookOptions createWebhookOptions, int operationIndex = 0);

        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified of account level events such as bounce and bounce recipient.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        ApiResponse<WebhookDto> CreateAccountWebhookWithHttpInfo(CreateWebhookOptions createWebhookOptions, int operationIndex = 0);
        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        WebhookDto CreateWebhook(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0);

        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        ApiResponse<WebhookDto> CreateWebhookWithHttpInfo(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0);
        /// <summary>
        /// Attach a WebHook URL to a phone number
        /// </summary>
        /// <remarks>
        /// Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        WebhookDto CreateWebhookForPhoneNumber(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0);

        /// <summary>
        /// Attach a WebHook URL to a phone number
        /// </summary>
        /// <remarks>
        /// Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        ApiResponse<WebhookDto> CreateWebhookForPhoneNumberWithHttpInfo(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0);
        /// <summary>
        /// Delete all webhooks
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllWebhooks(DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Delete all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllWebhooksWithHttpInfo(DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Delete and disable a Webhook for an Inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteWebhook(Guid inboxId, Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// Delete and disable a Webhook for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteWebhookWithHttpInfo(Guid inboxId, Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Delete a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteWebhookById(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// Delete a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteWebhookByIdWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// List account webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        PageWebhookProjection GetAllAccountWebhooks(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List account webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        ApiResponse<PageWebhookProjection> GetAllAccountWebhooksWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get results for all webhooks
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookResult</returns>
        PageWebhookResult GetAllWebhookResults(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get results for all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookResult</returns>
        ApiResponse<PageWebhookResult> GetAllWebhookResultsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// List Webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        PageWebhookProjection GetAllWebhooks(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List Webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        ApiResponse<PageWebhookProjection> GetAllWebhooksWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get paginated webhooks for an Inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        PageWebhookProjection GetInboxWebhooksPaginated(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get paginated webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        ApiResponse<PageWebhookProjection> GetInboxWebhooksPaginatedWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload by event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>JSONSchemaDto</returns>
        JSONSchemaDto GetJsonSchemaForWebhookEvent(string _event, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload by event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of JSONSchemaDto</returns>
        ApiResponse<JSONSchemaDto> GetJsonSchemaForWebhookEventWithHttpInfo(string _event, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>JSONSchemaDto</returns>
        JSONSchemaDto GetJsonSchemaForWebhookPayload(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of JSONSchemaDto</returns>
        ApiResponse<JSONSchemaDto> GetJsonSchemaForWebhookPayloadWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Get paginated webhooks for a phone number
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        PageWebhookProjection GetPhoneNumberWebhooksPaginated(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get paginated webhooks for a phone number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        ApiResponse<PageWebhookProjection> GetPhoneNumberWebhooksPaginatedWithHttpInfo(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AbstractWebhookPayload</returns>
        AbstractWebhookPayload GetTestWebhookPayload(string eventName = default(string), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AbstractWebhookPayload</returns>
        ApiResponse<AbstractWebhookPayload> GetTestWebhookPayloadWithHttpInfo(string eventName = default(string), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookBouncePayload</returns>
        WebhookBouncePayload GetTestWebhookPayloadBounce(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookBouncePayload</returns>
        ApiResponse<WebhookBouncePayload> GetTestWebhookPayloadBounceWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookBounceRecipientPayload</returns>
        WebhookBounceRecipientPayload GetTestWebhookPayloadBounceRecipient(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookBounceRecipientPayload</returns>
        ApiResponse<WebhookBounceRecipientPayload> GetTestWebhookPayloadBounceRecipientWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get webhook test payload for delivery status event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDeliveryStatusPayload</returns>
        WebhookDeliveryStatusPayload GetTestWebhookPayloadDeliveryStatus(int operationIndex = 0);

        /// <summary>
        /// Get webhook test payload for delivery status event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDeliveryStatusPayload</returns>
        ApiResponse<WebhookDeliveryStatusPayload> GetTestWebhookPayloadDeliveryStatusWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookEmailOpenedPayload</returns>
        WebhookEmailOpenedPayload GetTestWebhookPayloadEmailOpened(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookEmailOpenedPayload</returns>
        ApiResponse<WebhookEmailOpenedPayload> GetTestWebhookPayloadEmailOpenedWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookEmailReadPayload</returns>
        WebhookEmailReadPayload GetTestWebhookPayloadEmailRead(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookEmailReadPayload</returns>
        ApiResponse<WebhookEmailReadPayload> GetTestWebhookPayloadEmailReadWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get example payload for webhook
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AbstractWebhookPayload</returns>
        AbstractWebhookPayload GetTestWebhookPayloadForWebhook(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get example payload for webhook
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AbstractWebhookPayload</returns>
        ApiResponse<AbstractWebhookPayload> GetTestWebhookPayloadForWebhookWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Get webhook test payload for new attachment event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewAttachmentPayload</returns>
        WebhookNewAttachmentPayload GetTestWebhookPayloadNewAttachment(int operationIndex = 0);

        /// <summary>
        /// Get webhook test payload for new attachment event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewAttachmentPayload</returns>
        ApiResponse<WebhookNewAttachmentPayload> GetTestWebhookPayloadNewAttachmentWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get webhook test payload for new contact event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewContactPayload</returns>
        WebhookNewContactPayload GetTestWebhookPayloadNewContact(int operationIndex = 0);

        /// <summary>
        /// Get webhook test payload for new contact event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewContactPayload</returns>
        ApiResponse<WebhookNewContactPayload> GetTestWebhookPayloadNewContactWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get webhook test payload for new email event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewEmailPayload</returns>
        WebhookNewEmailPayload GetTestWebhookPayloadNewEmail(int operationIndex = 0);

        /// <summary>
        /// Get webhook test payload for new email event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewEmailPayload</returns>
        ApiResponse<WebhookNewEmailPayload> GetTestWebhookPayloadNewEmailWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get webhook test payload for new sms event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewSmsPayload</returns>
        WebhookNewSmsPayload GetTestWebhookPayloadNewSms(int operationIndex = 0);

        /// <summary>
        /// Get webhook test payload for new sms event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewSmsPayload</returns>
        ApiResponse<WebhookNewSmsPayload> GetTestWebhookPayloadNewSmsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        WebhookDto GetWebhook(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// Get a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        ApiResponse<WebhookDto> GetWebhookWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Get a webhook result for a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookResultDto</returns>
        WebhookResultDto GetWebhookResult(Guid webhookResultId, int operationIndex = 0);

        /// <summary>
        /// Get a webhook result for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookResultDto</returns>
        ApiResponse<WebhookResultDto> GetWebhookResultWithHttpInfo(Guid webhookResultId, int operationIndex = 0);
        /// <summary>
        /// Get a webhook results for a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookResult</returns>
        PageWebhookResult GetWebhookResults(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get a webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookResult</returns>
        ApiResponse<PageWebhookResult> GetWebhookResultsWithHttpInfo(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get a webhook results count for a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        CountDto GetWebhookResultsCount(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// Get a webhook results count for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        ApiResponse<CountDto> GetWebhookResultsCountWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Get count of unseen webhook results with error status
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnseenErrorCountDto</returns>
        UnseenErrorCountDto GetWebhookResultsUnseenErrorCount(int operationIndex = 0);

        /// <summary>
        /// Get count of unseen webhook results with error status
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnseenErrorCountDto</returns>
        ApiResponse<UnseenErrorCountDto> GetWebhookResultsUnseenErrorCountWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get all webhooks for an Inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        List<WebhookDto> GetWebhooks(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Get all webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        ApiResponse<List<WebhookDto>> GetWebhooksWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Redrive all webhook results that have failed status
        /// </summary>
        /// <remarks>
        /// Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookRedriveAllResult</returns>
        WebhookRedriveAllResult RedriveAllWebhookResults(int operationIndex = 0);

        /// <summary>
        /// Redrive all webhook results that have failed status
        /// </summary>
        /// <remarks>
        /// Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookRedriveAllResult</returns>
        ApiResponse<WebhookRedriveAllResult> RedriveAllWebhookResultsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload
        /// </summary>
        /// <remarks>
        /// Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookRedriveResult</returns>
        WebhookRedriveResult RedriveWebhookResult(Guid webhookResultId, int operationIndex = 0);

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload
        /// </summary>
        /// <remarks>
        /// Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookRedriveResult</returns>
        ApiResponse<WebhookRedriveResult> RedriveWebhookResultWithHttpInfo(Guid webhookResultId, int operationIndex = 0);
        /// <summary>
        /// Send webhook test data
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookTestResult</returns>
        WebhookTestResult SendTestData(Guid webhookId, int operationIndex = 0);

        /// <summary>
        /// Send webhook test data
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookTestResult</returns>
        ApiResponse<WebhookTestResult> SendTestDataWithHttpInfo(Guid webhookId, int operationIndex = 0);
        /// <summary>
        /// Update a webhook request headers
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        WebhookDto UpdateWebhookHeaders(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0);

        /// <summary>
        /// Update a webhook request headers
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        ApiResponse<WebhookDto> UpdateWebhookHeadersWithHttpInfo(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0);
        /// <summary>
        /// Verify a webhook payload signature
        /// </summary>
        /// <remarks>
        /// Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>VerifyWebhookSignatureResults</returns>
        VerifyWebhookSignatureResults VerifyWebhookSignature(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0);

        /// <summary>
        /// Verify a webhook payload signature
        /// </summary>
        /// <remarks>
        /// Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of VerifyWebhookSignatureResults</returns>
        ApiResponse<VerifyWebhookSignatureResults> VerifyWebhookSignatureWithHttpInfo(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0);
        /// <summary>
        /// Wait for webhook results for a webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;WebhookResultDto&gt;</returns>
        List<WebhookResultDto> WaitForWebhookResults(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0);

        /// <summary>
        /// Wait for webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;WebhookResultDto&gt;</returns>
        ApiResponse<List<WebhookResultDto>> WaitForWebhookResultsWithHttpInfo(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWebhookControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified of account level events such as bounce and bounce recipient.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        System.Threading.Tasks.Task<WebhookDto> CreateAccountWebhookAsync(CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified of account level events such as bounce and bounce recipient.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDto>> CreateAccountWebhookWithHttpInfoAsync(CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        System.Threading.Tasks.Task<WebhookDto> CreateWebhookAsync(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Attach a WebHook URL to an inbox
        /// </summary>
        /// <remarks>
        /// Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDto>> CreateWebhookWithHttpInfoAsync(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Attach a WebHook URL to a phone number
        /// </summary>
        /// <remarks>
        /// Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        System.Threading.Tasks.Task<WebhookDto> CreateWebhookForPhoneNumberAsync(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Attach a WebHook URL to a phone number
        /// </summary>
        /// <remarks>
        /// Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDto>> CreateWebhookForPhoneNumberWithHttpInfoAsync(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllWebhooksAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllWebhooksWithHttpInfoAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete and disable a Webhook for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteWebhookAsync(Guid inboxId, Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete and disable a Webhook for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteWebhookWithHttpInfoAsync(Guid inboxId, Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteWebhookByIdAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteWebhookByIdWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List account webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        System.Threading.Tasks.Task<PageWebhookProjection> GetAllAccountWebhooksAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List account webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookProjection>> GetAllAccountWebhooksWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get results for all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookResult</returns>
        System.Threading.Tasks.Task<PageWebhookResult> GetAllWebhookResultsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get results for all webhooks
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookResult>> GetAllWebhookResultsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List Webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        System.Threading.Tasks.Task<PageWebhookProjection> GetAllWebhooksAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List Webhooks Paginated
        /// </summary>
        /// <remarks>
        /// List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookProjection>> GetAllWebhooksWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        System.Threading.Tasks.Task<PageWebhookProjection> GetInboxWebhooksPaginatedAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookProjection>> GetInboxWebhooksPaginatedWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload by event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of JSONSchemaDto</returns>
        System.Threading.Tasks.Task<JSONSchemaDto> GetJsonSchemaForWebhookEventAsync(string _event, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload by event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (JSONSchemaDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<JSONSchemaDto>> GetJsonSchemaForWebhookEventWithHttpInfoAsync(string _event, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of JSONSchemaDto</returns>
        System.Threading.Tasks.Task<JSONSchemaDto> GetJsonSchemaForWebhookPayloadAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get JSON Schema definition for webhook payload
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (JSONSchemaDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<JSONSchemaDto>> GetJsonSchemaForWebhookPayloadWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated webhooks for a phone number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        System.Threading.Tasks.Task<PageWebhookProjection> GetPhoneNumberWebhooksPaginatedAsync(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated webhooks for a phone number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookProjection>> GetPhoneNumberWebhooksPaginatedWithHttpInfoAsync(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AbstractWebhookPayload</returns>
        System.Threading.Tasks.Task<AbstractWebhookPayload> GetTestWebhookPayloadAsync(string eventName = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AbstractWebhookPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<AbstractWebhookPayload>> GetTestWebhookPayloadWithHttpInfoAsync(string eventName = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookBouncePayload</returns>
        System.Threading.Tasks.Task<WebhookBouncePayload> GetTestWebhookPayloadBounceAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookBouncePayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookBouncePayload>> GetTestWebhookPayloadBounceWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookBounceRecipientPayload</returns>
        System.Threading.Tasks.Task<WebhookBounceRecipientPayload> GetTestWebhookPayloadBounceRecipientAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for bounce recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookBounceRecipientPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookBounceRecipientPayload>> GetTestWebhookPayloadBounceRecipientWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get webhook test payload for delivery status event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDeliveryStatusPayload</returns>
        System.Threading.Tasks.Task<WebhookDeliveryStatusPayload> GetTestWebhookPayloadDeliveryStatusAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get webhook test payload for delivery status event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDeliveryStatusPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDeliveryStatusPayload>> GetTestWebhookPayloadDeliveryStatusWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookEmailOpenedPayload</returns>
        System.Threading.Tasks.Task<WebhookEmailOpenedPayload> GetTestWebhookPayloadEmailOpenedAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookEmailOpenedPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookEmailOpenedPayload>> GetTestWebhookPayloadEmailOpenedWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookEmailReadPayload</returns>
        System.Threading.Tasks.Task<WebhookEmailReadPayload> GetTestWebhookPayloadEmailReadAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get webhook test payload for email opened event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookEmailReadPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookEmailReadPayload>> GetTestWebhookPayloadEmailReadWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get example payload for webhook
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AbstractWebhookPayload</returns>
        System.Threading.Tasks.Task<AbstractWebhookPayload> GetTestWebhookPayloadForWebhookAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get example payload for webhook
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AbstractWebhookPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<AbstractWebhookPayload>> GetTestWebhookPayloadForWebhookWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get webhook test payload for new attachment event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewAttachmentPayload</returns>
        System.Threading.Tasks.Task<WebhookNewAttachmentPayload> GetTestWebhookPayloadNewAttachmentAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get webhook test payload for new attachment event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewAttachmentPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookNewAttachmentPayload>> GetTestWebhookPayloadNewAttachmentWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get webhook test payload for new contact event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewContactPayload</returns>
        System.Threading.Tasks.Task<WebhookNewContactPayload> GetTestWebhookPayloadNewContactAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get webhook test payload for new contact event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewContactPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookNewContactPayload>> GetTestWebhookPayloadNewContactWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get webhook test payload for new email event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewEmailPayload</returns>
        System.Threading.Tasks.Task<WebhookNewEmailPayload> GetTestWebhookPayloadNewEmailAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get webhook test payload for new email event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewEmailPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookNewEmailPayload>> GetTestWebhookPayloadNewEmailWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get webhook test payload for new sms event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewSmsPayload</returns>
        System.Threading.Tasks.Task<WebhookNewSmsPayload> GetTestWebhookPayloadNewSmsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get webhook test payload for new sms event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewSmsPayload)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookNewSmsPayload>> GetTestWebhookPayloadNewSmsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        System.Threading.Tasks.Task<WebhookDto> GetWebhookAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDto>> GetWebhookWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a webhook result for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookResultDto</returns>
        System.Threading.Tasks.Task<WebhookResultDto> GetWebhookResultAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a webhook result for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookResultDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookResultDto>> GetWebhookResultWithHttpInfoAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookResult</returns>
        System.Threading.Tasks.Task<PageWebhookResult> GetWebhookResultsAsync(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageWebhookResult>> GetWebhookResultsWithHttpInfoAsync(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a webhook results count for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        System.Threading.Tasks.Task<CountDto> GetWebhookResultsCountAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a webhook results count for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<CountDto>> GetWebhookResultsCountWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get count of unseen webhook results with error status
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnseenErrorCountDto</returns>
        System.Threading.Tasks.Task<UnseenErrorCountDto> GetWebhookResultsUnseenErrorCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get count of unseen webhook results with error status
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnseenErrorCountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<UnseenErrorCountDto>> GetWebhookResultsUnseenErrorCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        System.Threading.Tasks.Task<List<WebhookDto>> GetWebhooksAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all webhooks for an Inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;WebhookDto&gt;)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<List<WebhookDto>>> GetWebhooksWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Redrive all webhook results that have failed status
        /// </summary>
        /// <remarks>
        /// Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookRedriveAllResult</returns>
        System.Threading.Tasks.Task<WebhookRedriveAllResult> RedriveAllWebhookResultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Redrive all webhook results that have failed status
        /// </summary>
        /// <remarks>
        /// Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookRedriveAllResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookRedriveAllResult>> RedriveAllWebhookResultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload
        /// </summary>
        /// <remarks>
        /// Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookRedriveResult</returns>
        System.Threading.Tasks.Task<WebhookRedriveResult> RedriveWebhookResultAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload
        /// </summary>
        /// <remarks>
        /// Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookRedriveResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookRedriveResult>> RedriveWebhookResultWithHttpInfoAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send webhook test data
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookTestResult</returns>
        System.Threading.Tasks.Task<WebhookTestResult> SendTestDataAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send webhook test data
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookTestResult>> SendTestDataWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update a webhook request headers
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        System.Threading.Tasks.Task<WebhookDto> UpdateWebhookHeadersAsync(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update a webhook request headers
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<WebhookDto>> UpdateWebhookHeadersWithHttpInfoAsync(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Verify a webhook payload signature
        /// </summary>
        /// <remarks>
        /// Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of VerifyWebhookSignatureResults</returns>
        System.Threading.Tasks.Task<VerifyWebhookSignatureResults> VerifyWebhookSignatureAsync(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Verify a webhook payload signature
        /// </summary>
        /// <remarks>
        /// Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (VerifyWebhookSignatureResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<VerifyWebhookSignatureResults>> VerifyWebhookSignatureWithHttpInfoAsync(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;WebhookResultDto&gt;</returns>
        System.Threading.Tasks.Task<List<WebhookResultDto>> WaitForWebhookResultsAsync(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for webhook results for a webhook
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;WebhookResultDto&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<WebhookResultDto>>> WaitForWebhookResultsWithHttpInfoAsync(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWebhookControllerApi : IWebhookControllerApiSync, IWebhookControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public WebhookControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public WebhookControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public WebhookControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WebhookControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public WebhookControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Attach a WebHook URL to an inbox Get notified of account level events such as bounce and bounce recipient.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        public WebhookDto CreateAccountWebhook(CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = CreateAccountWebhookWithHttpInfo(createWebhookOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified of account level events such as bounce and bounce recipient.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        public mailslurp.Client.ApiResponse<WebhookDto> CreateAccountWebhookWithHttpInfo(CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateAccountWebhook");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateAccountWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookDto>("/webhooks", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateAccountWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified of account level events such as bounce and bounce recipient.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        public async System.Threading.Tasks.Task<WebhookDto> CreateAccountWebhookAsync(CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = await CreateAccountWebhookWithHttpInfoAsync(createWebhookOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified of account level events such as bounce and bounce recipient.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDto>> CreateAccountWebhookWithHttpInfoAsync(CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateAccountWebhook");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateAccountWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookDto>("/webhooks", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateAccountWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        public WebhookDto CreateWebhook(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = CreateWebhookWithHttpInfo(inboxId, createWebhookOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        public mailslurp.Client.ApiResponse<WebhookDto> CreateWebhookWithHttpInfo(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateWebhook");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookDto>("/inboxes/{inboxId}/webhooks", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        public async System.Threading.Tasks.Task<WebhookDto> CreateWebhookAsync(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = await CreateWebhookWithHttpInfoAsync(inboxId, createWebhookOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to an inbox Get notified whenever an inbox receives an email via a WebHook URL. An emailID will be posted to this URL every time an email is received for this inbox. The URL must be publicly reachable by the MailSlurp server. You can provide basicAuth values if you wish to secure this endpoint.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDto>> CreateWebhookWithHttpInfoAsync(Guid inboxId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateWebhook");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookDto>("/inboxes/{inboxId}/webhooks", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Attach a WebHook URL to a phone number Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        public WebhookDto CreateWebhookForPhoneNumber(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = CreateWebhookForPhoneNumberWithHttpInfo(phoneNumberId, createWebhookOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to a phone number Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        public mailslurp.Client.ApiResponse<WebhookDto> CreateWebhookForPhoneNumberWithHttpInfo(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateWebhookForPhoneNumber");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter
            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateWebhookForPhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookDto>("/phone/numbers/{phoneNumberId}/webhooks", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateWebhookForPhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Attach a WebHook URL to a phone number Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        public async System.Threading.Tasks.Task<WebhookDto> CreateWebhookForPhoneNumberAsync(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = await CreateWebhookForPhoneNumberWithHttpInfoAsync(phoneNumberId, createWebhookOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Attach a WebHook URL to a phone number Get notified whenever a phone number receives an SMS via a WebHook URL.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="createWebhookOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDto>> CreateWebhookForPhoneNumberWithHttpInfoAsync(Guid phoneNumberId, CreateWebhookOptions createWebhookOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createWebhookOptions' is set
            if (createWebhookOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createWebhookOptions' when calling WebhookControllerApi->CreateWebhookForPhoneNumber");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter
            localVarRequestOptions.Data = createWebhookOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.CreateWebhookForPhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookDto>("/phone/numbers/{phoneNumberId}/webhooks", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateWebhookForPhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllWebhooks(DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            DeleteAllWebhooksWithHttpInfo(before);
        }

        /// <summary>
        /// Delete all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllWebhooksWithHttpInfo(DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteAllWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/webhooks", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllWebhooksAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllWebhooksWithHttpInfoAsync(before, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">before (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllWebhooksWithHttpInfoAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteAllWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/webhooks", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete and disable a Webhook for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteWebhook(Guid inboxId, Guid webhookId, int operationIndex = 0)
        {
            DeleteWebhookWithHttpInfo(inboxId, webhookId);
        }

        /// <summary>
        /// Delete and disable a Webhook for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteWebhookWithHttpInfo(Guid inboxId, Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/{inboxId}/webhooks/{webhookId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete and disable a Webhook for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteWebhookAsync(Guid inboxId, Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteWebhookWithHttpInfoAsync(inboxId, webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete and disable a Webhook for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteWebhookWithHttpInfoAsync(Guid inboxId, Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/{inboxId}/webhooks/{webhookId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteWebhookById(Guid webhookId, int operationIndex = 0)
        {
            DeleteWebhookByIdWithHttpInfo(webhookId);
        }

        /// <summary>
        /// Delete a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteWebhookByIdWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteWebhookById";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/webhooks/{webhookId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteWebhookById", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteWebhookByIdAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteWebhookByIdWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteWebhookByIdWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.DeleteWebhookById";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/webhooks/{webhookId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteWebhookById", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List account webhooks Paginated List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        public PageWebhookProjection GetAllAccountWebhooks(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = GetAllAccountWebhooksWithHttpInfo(page, size, sort, eventType, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List account webhooks Paginated List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        public mailslurp.Client.ApiResponse<PageWebhookProjection> GetAllAccountWebhooksWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (eventType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventType", eventType));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllAccountWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookProjection>("/webhooks/account/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllAccountWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List account webhooks Paginated List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        public async System.Threading.Tasks.Task<PageWebhookProjection> GetAllAccountWebhooksAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = await GetAllAccountWebhooksWithHttpInfoAsync(page, size, sort, eventType, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List account webhooks Paginated List account webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="eventType">Optional event type (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookProjection>> GetAllAccountWebhooksWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string eventType = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (eventType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventType", eventType));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllAccountWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookProjection>("/webhooks/account/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllAccountWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get results for all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookResult</returns>
        public PageWebhookResult GetAllWebhookResults(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookResult> localVarResponse = GetAllWebhookResultsWithHttpInfo(page, size, sort, searchFilter, since, before, unseenOnly, resultType, eventName, minStatusCode, maxStatusCode, inboxId, smsId, attachmentId, emailId, phoneId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get results for all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookResult</returns>
        public mailslurp.Client.ApiResponse<PageWebhookResult> GetAllWebhookResultsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (unseenOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unseenOnly", unseenOnly));
            }
            if (resultType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "resultType", resultType));
            }
            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }
            if (minStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minStatusCode", minStatusCode));
            }
            if (maxStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "maxStatusCode", maxStatusCode));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (smsId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "smsId", smsId));
            }
            if (attachmentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "attachmentId", attachmentId));
            }
            if (emailId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookResult>("/webhooks/results", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get results for all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookResult</returns>
        public async System.Threading.Tasks.Task<PageWebhookResult> GetAllWebhookResultsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookResult> localVarResponse = await GetAllWebhookResultsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, unseenOnly, resultType, eventName, minStatusCode, maxStatusCode, inboxId, smsId, attachmentId, emailId, phoneId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get results for all webhooks 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookResult>> GetAllWebhookResultsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (unseenOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unseenOnly", unseenOnly));
            }
            if (resultType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "resultType", resultType));
            }
            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }
            if (minStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minStatusCode", minStatusCode));
            }
            if (maxStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "maxStatusCode", maxStatusCode));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (smsId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "smsId", smsId));
            }
            if (attachmentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "attachmentId", attachmentId));
            }
            if (emailId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookResult>("/webhooks/results", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Webhooks Paginated List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        public PageWebhookProjection GetAllWebhooks(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = GetAllWebhooksWithHttpInfo(page, size, sort, searchFilter, since, inboxId, phoneId, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Webhooks Paginated List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        public mailslurp.Client.ApiResponse<PageWebhookProjection> GetAllWebhooksWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookProjection>("/webhooks/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Webhooks Paginated List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        public async System.Threading.Tasks.Task<PageWebhookProjection> GetAllWebhooksAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = await GetAllWebhooksWithHttpInfoAsync(page, size, sort, searchFilter, since, inboxId, phoneId, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Webhooks Paginated List webhooks in paginated form. Allows for page index, page size, and sort direction.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="inboxId">Filter by inboxId (optional)</param>
        /// <param name="phoneId">Filter by phoneId (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookProjection>> GetAllWebhooksWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), Guid? inboxId = default(Guid?), Guid? phoneId = default(Guid?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetAllWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookProjection>("/webhooks/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        public PageWebhookProjection GetInboxWebhooksPaginated(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = GetInboxWebhooksPaginatedWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        public mailslurp.Client.ApiResponse<PageWebhookProjection> GetInboxWebhooksPaginatedWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetInboxWebhooksPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookProjection>("/inboxes/{inboxId}/webhooks/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxWebhooksPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        public async System.Threading.Tasks.Task<PageWebhookProjection> GetInboxWebhooksPaginatedAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = await GetInboxWebhooksPaginatedWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookProjection>> GetInboxWebhooksPaginatedWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetInboxWebhooksPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookProjection>("/inboxes/{inboxId}/webhooks/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxWebhooksPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload by event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>JSONSchemaDto</returns>
        public JSONSchemaDto GetJsonSchemaForWebhookEvent(string _event, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<JSONSchemaDto> localVarResponse = GetJsonSchemaForWebhookEventWithHttpInfo(_event);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload by event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of JSONSchemaDto</returns>
        public mailslurp.Client.ApiResponse<JSONSchemaDto> GetJsonSchemaForWebhookEventWithHttpInfo(string _event, int operationIndex = 0)
        {
            // verify the required parameter '_event' is set
            if (_event == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter '_event' when calling WebhookControllerApi->GetJsonSchemaForWebhookEvent");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "event", _event));

            localVarRequestOptions.Operation = "WebhookControllerApi.GetJsonSchemaForWebhookEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<JSONSchemaDto>("/webhooks/schema", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonSchemaForWebhookEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload by event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of JSONSchemaDto</returns>
        public async System.Threading.Tasks.Task<JSONSchemaDto> GetJsonSchemaForWebhookEventAsync(string _event, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<JSONSchemaDto> localVarResponse = await GetJsonSchemaForWebhookEventWithHttpInfoAsync(_event, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload by event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="_event"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (JSONSchemaDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<JSONSchemaDto>> GetJsonSchemaForWebhookEventWithHttpInfoAsync(string _event, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter '_event' is set
            if (_event == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter '_event' when calling WebhookControllerApi->GetJsonSchemaForWebhookEvent");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "event", _event));

            localVarRequestOptions.Operation = "WebhookControllerApi.GetJsonSchemaForWebhookEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<JSONSchemaDto>("/webhooks/schema", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonSchemaForWebhookEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>JSONSchemaDto</returns>
        public JSONSchemaDto GetJsonSchemaForWebhookPayload(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<JSONSchemaDto> localVarResponse = GetJsonSchemaForWebhookPayloadWithHttpInfo(webhookId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of JSONSchemaDto</returns>
        public mailslurp.Client.ApiResponse<JSONSchemaDto> GetJsonSchemaForWebhookPayloadWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetJsonSchemaForWebhookPayload";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<JSONSchemaDto>("/webhooks/{webhookId}/schema", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonSchemaForWebhookPayload", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of JSONSchemaDto</returns>
        public async System.Threading.Tasks.Task<JSONSchemaDto> GetJsonSchemaForWebhookPayloadAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<JSONSchemaDto> localVarResponse = await GetJsonSchemaForWebhookPayloadWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get JSON Schema definition for webhook payload
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (JSONSchemaDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<JSONSchemaDto>> GetJsonSchemaForWebhookPayloadWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetJsonSchemaForWebhookPayload";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<JSONSchemaDto>("/webhooks/{webhookId}/schema", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonSchemaForWebhookPayload", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated webhooks for a phone number 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookProjection</returns>
        public PageWebhookProjection GetPhoneNumberWebhooksPaginated(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = GetPhoneNumberWebhooksPaginatedWithHttpInfo(phoneId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated webhooks for a phone number 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookProjection</returns>
        public mailslurp.Client.ApiResponse<PageWebhookProjection> GetPhoneNumberWebhooksPaginatedWithHttpInfo(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneId", mailslurp.Client.ClientUtils.ParameterToString(phoneId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetPhoneNumberWebhooksPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookProjection>("/phone/numbers/{phoneId}/webhooks/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumberWebhooksPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated webhooks for a phone number 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookProjection</returns>
        public async System.Threading.Tasks.Task<PageWebhookProjection> GetPhoneNumberWebhooksPaginatedAsync(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookProjection> localVarResponse = await GetPhoneNumberWebhooksPaginatedWithHttpInfoAsync(phoneId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated webhooks for a phone number 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneId"></param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookProjection>> GetPhoneNumberWebhooksPaginatedWithHttpInfoAsync(Guid phoneId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneId", mailslurp.Client.ClientUtils.ParameterToString(phoneId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetPhoneNumberWebhooksPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookProjection>("/phone/numbers/{phoneId}/webhooks/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumberWebhooksPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AbstractWebhookPayload</returns>
        public AbstractWebhookPayload GetTestWebhookPayload(string eventName = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AbstractWebhookPayload> localVarResponse = GetTestWebhookPayloadWithHttpInfo(eventName);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AbstractWebhookPayload</returns>
        public mailslurp.Client.ApiResponse<AbstractWebhookPayload> GetTestWebhookPayloadWithHttpInfo(string eventName = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayload";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AbstractWebhookPayload>("/webhooks/test", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayload", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AbstractWebhookPayload</returns>
        public async System.Threading.Tasks.Task<AbstractWebhookPayload> GetTestWebhookPayloadAsync(string eventName = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AbstractWebhookPayload> localVarResponse = await GetTestWebhookPayloadWithHttpInfoAsync(eventName, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get test webhook payload example. Response content depends on eventName passed. Uses &#x60;EMAIL_RECEIVED&#x60; as default.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventName"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AbstractWebhookPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AbstractWebhookPayload>> GetTestWebhookPayloadWithHttpInfoAsync(string eventName = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayload";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AbstractWebhookPayload>("/webhooks/test", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayload", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for bounce
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookBouncePayload</returns>
        public WebhookBouncePayload GetTestWebhookPayloadBounce(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookBouncePayload> localVarResponse = GetTestWebhookPayloadBounceWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for bounce
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookBouncePayload</returns>
        public mailslurp.Client.ApiResponse<WebhookBouncePayload> GetTestWebhookPayloadBounceWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadBounce";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookBouncePayload>("/webhooks/test/email-bounce-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadBounce", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for bounce
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookBouncePayload</returns>
        public async System.Threading.Tasks.Task<WebhookBouncePayload> GetTestWebhookPayloadBounceAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookBouncePayload> localVarResponse = await GetTestWebhookPayloadBounceWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for bounce
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookBouncePayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookBouncePayload>> GetTestWebhookPayloadBounceWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadBounce";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookBouncePayload>("/webhooks/test/email-bounce-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadBounce", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for bounce recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookBounceRecipientPayload</returns>
        public WebhookBounceRecipientPayload GetTestWebhookPayloadBounceRecipient(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookBounceRecipientPayload> localVarResponse = GetTestWebhookPayloadBounceRecipientWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for bounce recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookBounceRecipientPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookBounceRecipientPayload> GetTestWebhookPayloadBounceRecipientWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadBounceRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookBounceRecipientPayload>("/webhooks/test/email-bounce-recipient-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadBounceRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for bounce recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookBounceRecipientPayload</returns>
        public async System.Threading.Tasks.Task<WebhookBounceRecipientPayload> GetTestWebhookPayloadBounceRecipientAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookBounceRecipientPayload> localVarResponse = await GetTestWebhookPayloadBounceRecipientWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for bounce recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookBounceRecipientPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookBounceRecipientPayload>> GetTestWebhookPayloadBounceRecipientWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadBounceRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookBounceRecipientPayload>("/webhooks/test/email-bounce-recipient-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadBounceRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for delivery status event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDeliveryStatusPayload</returns>
        public WebhookDeliveryStatusPayload GetTestWebhookPayloadDeliveryStatus(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDeliveryStatusPayload> localVarResponse = GetTestWebhookPayloadDeliveryStatusWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for delivery status event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDeliveryStatusPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookDeliveryStatusPayload> GetTestWebhookPayloadDeliveryStatusWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadDeliveryStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookDeliveryStatusPayload>("/webhooks/test/delivery-status-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadDeliveryStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for delivery status event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDeliveryStatusPayload</returns>
        public async System.Threading.Tasks.Task<WebhookDeliveryStatusPayload> GetTestWebhookPayloadDeliveryStatusAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDeliveryStatusPayload> localVarResponse = await GetTestWebhookPayloadDeliveryStatusWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for delivery status event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDeliveryStatusPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDeliveryStatusPayload>> GetTestWebhookPayloadDeliveryStatusWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadDeliveryStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookDeliveryStatusPayload>("/webhooks/test/delivery-status-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadDeliveryStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookEmailOpenedPayload</returns>
        public WebhookEmailOpenedPayload GetTestWebhookPayloadEmailOpened(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookEmailOpenedPayload> localVarResponse = GetTestWebhookPayloadEmailOpenedWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookEmailOpenedPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookEmailOpenedPayload> GetTestWebhookPayloadEmailOpenedWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadEmailOpened";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookEmailOpenedPayload>("/webhooks/test/email-opened-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadEmailOpened", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookEmailOpenedPayload</returns>
        public async System.Threading.Tasks.Task<WebhookEmailOpenedPayload> GetTestWebhookPayloadEmailOpenedAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookEmailOpenedPayload> localVarResponse = await GetTestWebhookPayloadEmailOpenedWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookEmailOpenedPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookEmailOpenedPayload>> GetTestWebhookPayloadEmailOpenedWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadEmailOpened";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookEmailOpenedPayload>("/webhooks/test/email-opened-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadEmailOpened", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookEmailReadPayload</returns>
        public WebhookEmailReadPayload GetTestWebhookPayloadEmailRead(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookEmailReadPayload> localVarResponse = GetTestWebhookPayloadEmailReadWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookEmailReadPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookEmailReadPayload> GetTestWebhookPayloadEmailReadWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadEmailRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookEmailReadPayload>("/webhooks/test/email-read-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadEmailRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookEmailReadPayload</returns>
        public async System.Threading.Tasks.Task<WebhookEmailReadPayload> GetTestWebhookPayloadEmailReadAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookEmailReadPayload> localVarResponse = await GetTestWebhookPayloadEmailReadWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get webhook test payload for email opened event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookEmailReadPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookEmailReadPayload>> GetTestWebhookPayloadEmailReadWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadEmailRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookEmailReadPayload>("/webhooks/test/email-read-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadEmailRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get example payload for webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AbstractWebhookPayload</returns>
        public AbstractWebhookPayload GetTestWebhookPayloadForWebhook(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AbstractWebhookPayload> localVarResponse = GetTestWebhookPayloadForWebhookWithHttpInfo(webhookId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get example payload for webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AbstractWebhookPayload</returns>
        public mailslurp.Client.ApiResponse<AbstractWebhookPayload> GetTestWebhookPayloadForWebhookWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadForWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<AbstractWebhookPayload>("/webhooks/{webhookId}/example", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadForWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get example payload for webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AbstractWebhookPayload</returns>
        public async System.Threading.Tasks.Task<AbstractWebhookPayload> GetTestWebhookPayloadForWebhookAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AbstractWebhookPayload> localVarResponse = await GetTestWebhookPayloadForWebhookWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get example payload for webhook
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AbstractWebhookPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AbstractWebhookPayload>> GetTestWebhookPayloadForWebhookWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadForWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<AbstractWebhookPayload>("/webhooks/{webhookId}/example", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadForWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new attachment event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewAttachmentPayload</returns>
        public WebhookNewAttachmentPayload GetTestWebhookPayloadNewAttachment(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookNewAttachmentPayload> localVarResponse = GetTestWebhookPayloadNewAttachmentWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new attachment event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewAttachmentPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookNewAttachmentPayload> GetTestWebhookPayloadNewAttachmentWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookNewAttachmentPayload>("/webhooks/test/new-attachment-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new attachment event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewAttachmentPayload</returns>
        public async System.Threading.Tasks.Task<WebhookNewAttachmentPayload> GetTestWebhookPayloadNewAttachmentAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookNewAttachmentPayload> localVarResponse = await GetTestWebhookPayloadNewAttachmentWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new attachment event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewAttachmentPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookNewAttachmentPayload>> GetTestWebhookPayloadNewAttachmentWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookNewAttachmentPayload>("/webhooks/test/new-attachment-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new contact event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewContactPayload</returns>
        public WebhookNewContactPayload GetTestWebhookPayloadNewContact(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookNewContactPayload> localVarResponse = GetTestWebhookPayloadNewContactWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new contact event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewContactPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookNewContactPayload> GetTestWebhookPayloadNewContactWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookNewContactPayload>("/webhooks/test/new-contact-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new contact event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewContactPayload</returns>
        public async System.Threading.Tasks.Task<WebhookNewContactPayload> GetTestWebhookPayloadNewContactAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookNewContactPayload> localVarResponse = await GetTestWebhookPayloadNewContactWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new contact event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewContactPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookNewContactPayload>> GetTestWebhookPayloadNewContactWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookNewContactPayload>("/webhooks/test/new-contact-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new email event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewEmailPayload</returns>
        public WebhookNewEmailPayload GetTestWebhookPayloadNewEmail(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookNewEmailPayload> localVarResponse = GetTestWebhookPayloadNewEmailWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new email event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewEmailPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookNewEmailPayload> GetTestWebhookPayloadNewEmailWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookNewEmailPayload>("/webhooks/test/new-email-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new email event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewEmailPayload</returns>
        public async System.Threading.Tasks.Task<WebhookNewEmailPayload> GetTestWebhookPayloadNewEmailAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookNewEmailPayload> localVarResponse = await GetTestWebhookPayloadNewEmailWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new email event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewEmailPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookNewEmailPayload>> GetTestWebhookPayloadNewEmailWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookNewEmailPayload>("/webhooks/test/new-email-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new sms event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookNewSmsPayload</returns>
        public WebhookNewSmsPayload GetTestWebhookPayloadNewSms(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookNewSmsPayload> localVarResponse = GetTestWebhookPayloadNewSmsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new sms event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookNewSmsPayload</returns>
        public mailslurp.Client.ApiResponse<WebhookNewSmsPayload> GetTestWebhookPayloadNewSmsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookNewSmsPayload>("/webhooks/test/new-sms-payload", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get webhook test payload for new sms event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookNewSmsPayload</returns>
        public async System.Threading.Tasks.Task<WebhookNewSmsPayload> GetTestWebhookPayloadNewSmsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookNewSmsPayload> localVarResponse = await GetTestWebhookPayloadNewSmsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get webhook test payload for new sms event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookNewSmsPayload)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookNewSmsPayload>> GetTestWebhookPayloadNewSmsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetTestWebhookPayloadNewSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookNewSmsPayload>("/webhooks/test/new-sms-payload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTestWebhookPayloadNewSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        public WebhookDto GetWebhook(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = GetWebhookWithHttpInfo(webhookId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        public mailslurp.Client.ApiResponse<WebhookDto> GetWebhookWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookDto>("/webhooks/{webhookId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        public async System.Threading.Tasks.Task<WebhookDto> GetWebhookAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = await GetWebhookWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDto>> GetWebhookWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhook";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookDto>("/webhooks/{webhookId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhook", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook result for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookResultDto</returns>
        public WebhookResultDto GetWebhookResult(Guid webhookResultId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookResultDto> localVarResponse = GetWebhookResultWithHttpInfo(webhookResultId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook result for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookResultDto</returns>
        public mailslurp.Client.ApiResponse<WebhookResultDto> GetWebhookResultWithHttpInfo(Guid webhookResultId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookResultId", mailslurp.Client.ClientUtils.ParameterToString(webhookResultId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResult";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<WebhookResultDto>("/webhooks/results/{webhookResultId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResult", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook result for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookResultDto</returns>
        public async System.Threading.Tasks.Task<WebhookResultDto> GetWebhookResultAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookResultDto> localVarResponse = await GetWebhookResultWithHttpInfoAsync(webhookResultId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook result for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookResultDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookResultDto>> GetWebhookResultWithHttpInfoAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookResultId", mailslurp.Client.ClientUtils.ParameterToString(webhookResultId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResult";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<WebhookResultDto>("/webhooks/results/{webhookResultId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResult", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageWebhookResult</returns>
        public PageWebhookResult GetWebhookResults(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageWebhookResult> localVarResponse = GetWebhookResultsWithHttpInfo(webhookId, page, size, sort, searchFilter, since, before, unseenOnly, resultType, eventName, minStatusCode, maxStatusCode, inboxId, smsId, attachmentId, emailId, phoneId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageWebhookResult</returns>
        public mailslurp.Client.ApiResponse<PageWebhookResult> GetWebhookResultsWithHttpInfo(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (unseenOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unseenOnly", unseenOnly));
            }
            if (resultType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "resultType", resultType));
            }
            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }
            if (minStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minStatusCode", minStatusCode));
            }
            if (maxStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "maxStatusCode", maxStatusCode));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (smsId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "smsId", smsId));
            }
            if (attachmentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "attachmentId", attachmentId));
            }
            if (emailId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageWebhookResult>("/webhooks/{webhookId}/results", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageWebhookResult</returns>
        public async System.Threading.Tasks.Task<PageWebhookResult> GetWebhookResultsAsync(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageWebhookResult> localVarResponse = await GetWebhookResultsWithHttpInfoAsync(webhookId, page, size, sort, searchFilter, since, before, unseenOnly, resultType, eventName, minStatusCode, maxStatusCode, inboxId, smsId, attachmentId, emailId, phoneId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="unseenOnly">Filter for unseen exceptions only (optional)</param>
        /// <param name="resultType">Filter by result type (optional)</param>
        /// <param name="eventName">Filter by event name (optional)</param>
        /// <param name="minStatusCode">Minimum response status (optional)</param>
        /// <param name="maxStatusCode">Maximum response status (optional)</param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="smsId">Sms ID (optional)</param>
        /// <param name="attachmentId">Attachment ID (optional)</param>
        /// <param name="emailId">Email ID (optional)</param>
        /// <param name="phoneId">Phone ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageWebhookResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageWebhookResult>> GetWebhookResultsWithHttpInfoAsync(Guid webhookId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? unseenOnly = default(bool?), string resultType = default(string), string eventName = default(string), int? minStatusCode = default(int?), int? maxStatusCode = default(int?), Guid? inboxId = default(Guid?), Guid? smsId = default(Guid?), Guid? attachmentId = default(Guid?), Guid? emailId = default(Guid?), Guid? phoneId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (unseenOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unseenOnly", unseenOnly));
            }
            if (resultType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "resultType", resultType));
            }
            if (eventName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "eventName", eventName));
            }
            if (minStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minStatusCode", minStatusCode));
            }
            if (maxStatusCode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "maxStatusCode", maxStatusCode));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (smsId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "smsId", smsId));
            }
            if (attachmentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "attachmentId", attachmentId));
            }
            if (emailId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            }
            if (phoneId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneId", phoneId));
            }

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageWebhookResult>("/webhooks/{webhookId}/results", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook results count for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        public CountDto GetWebhookResultsCount(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = GetWebhookResultsCountWithHttpInfo(webhookId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook results count for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        public mailslurp.Client.ApiResponse<CountDto> GetWebhookResultsCountWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResultsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<CountDto>("/webhooks/{webhookId}/results/count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResultsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook results count for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        public async System.Threading.Tasks.Task<CountDto> GetWebhookResultsCountAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = await GetWebhookResultsCountWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook results count for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CountDto>> GetWebhookResultsCountWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResultsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<CountDto>("/webhooks/{webhookId}/results/count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResultsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get count of unseen webhook results with error status 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnseenErrorCountDto</returns>
        public UnseenErrorCountDto GetWebhookResultsUnseenErrorCount(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<UnseenErrorCountDto> localVarResponse = GetWebhookResultsUnseenErrorCountWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get count of unseen webhook results with error status 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnseenErrorCountDto</returns>
        public mailslurp.Client.ApiResponse<UnseenErrorCountDto> GetWebhookResultsUnseenErrorCountWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResultsUnseenErrorCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<UnseenErrorCountDto>("/webhooks/results/unseen-count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResultsUnseenErrorCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get count of unseen webhook results with error status 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnseenErrorCountDto</returns>
        public async System.Threading.Tasks.Task<UnseenErrorCountDto> GetWebhookResultsUnseenErrorCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<UnseenErrorCountDto> localVarResponse = await GetWebhookResultsUnseenErrorCountWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get count of unseen webhook results with error status 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnseenErrorCountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<UnseenErrorCountDto>> GetWebhookResultsUnseenErrorCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhookResultsUnseenErrorCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<UnseenErrorCountDto>("/webhooks/results/unseen-count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhookResultsUnseenErrorCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        public List<WebhookDto> GetWebhooks(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<WebhookDto>> localVarResponse = GetWebhooksWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<List<WebhookDto>> GetWebhooksWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<WebhookDto>>("/inboxes/{inboxId}/webhooks", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;WebhookDto&gt;</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<List<WebhookDto>> GetWebhooksAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<WebhookDto>> localVarResponse = await GetWebhooksWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all webhooks for an Inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;WebhookDto&gt;)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<WebhookDto>>> GetWebhooksWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.GetWebhooks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<WebhookDto>>("/inboxes/{inboxId}/webhooks", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetWebhooks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Redrive all webhook results that have failed status Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookRedriveAllResult</returns>
        public WebhookRedriveAllResult RedriveAllWebhookResults(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookRedriveAllResult> localVarResponse = RedriveAllWebhookResultsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Redrive all webhook results that have failed status Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookRedriveAllResult</returns>
        public mailslurp.Client.ApiResponse<WebhookRedriveAllResult> RedriveAllWebhookResultsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.RedriveAllWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookRedriveAllResult>("/webhooks/results/redrive", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RedriveAllWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Redrive all webhook results that have failed status Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookRedriveAllResult</returns>
        public async System.Threading.Tasks.Task<WebhookRedriveAllResult> RedriveAllWebhookResultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookRedriveAllResult> localVarResponse = await RedriveAllWebhookResultsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Redrive all webhook results that have failed status Allows you to resend webhook payloads for any recorded webhook result that failed to deliver the payload.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookRedriveAllResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookRedriveAllResult>> RedriveAllWebhookResultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "WebhookControllerApi.RedriveAllWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookRedriveAllResult>("/webhooks/results/redrive", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RedriveAllWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookRedriveResult</returns>
        public WebhookRedriveResult RedriveWebhookResult(Guid webhookResultId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookRedriveResult> localVarResponse = RedriveWebhookResultWithHttpInfo(webhookResultId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookRedriveResult</returns>
        public mailslurp.Client.ApiResponse<WebhookRedriveResult> RedriveWebhookResultWithHttpInfo(Guid webhookResultId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookResultId", mailslurp.Client.ClientUtils.ParameterToString(webhookResultId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.RedriveWebhookResult";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookRedriveResult>("/webhooks/results/{webhookResultId}/redrive", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RedriveWebhookResult", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookRedriveResult</returns>
        public async System.Threading.Tasks.Task<WebhookRedriveResult> RedriveWebhookResultAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookRedriveResult> localVarResponse = await RedriveWebhookResultWithHttpInfoAsync(webhookResultId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a webhook result and try to resend the original webhook payload Allows you to resend a webhook payload that was already sent. Webhooks that fail are retried automatically for 24 hours and then put in a dead letter queue. You can retry results manually using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookResultId">Webhook Result ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookRedriveResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookRedriveResult>> RedriveWebhookResultWithHttpInfoAsync(Guid webhookResultId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookResultId", mailslurp.Client.ClientUtils.ParameterToString(webhookResultId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.RedriveWebhookResult";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookRedriveResult>("/webhooks/results/{webhookResultId}/redrive", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RedriveWebhookResult", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send webhook test data 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookTestResult</returns>
        public WebhookTestResult SendTestData(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookTestResult> localVarResponse = SendTestDataWithHttpInfo(webhookId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send webhook test data 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookTestResult</returns>
        public mailslurp.Client.ApiResponse<WebhookTestResult> SendTestDataWithHttpInfo(Guid webhookId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.SendTestData";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<WebhookTestResult>("/webhooks/{webhookId}/test", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendTestData", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send webhook test data 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookTestResult</returns>
        public async System.Threading.Tasks.Task<WebhookTestResult> SendTestDataAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookTestResult> localVarResponse = await SendTestDataWithHttpInfoAsync(webhookId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send webhook test data 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookTestResult>> SendTestDataWithHttpInfoAsync(Guid webhookId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter

            localVarRequestOptions.Operation = "WebhookControllerApi.SendTestData";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<WebhookTestResult>("/webhooks/{webhookId}/test", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendTestData", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update a webhook request headers 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>WebhookDto</returns>
        public WebhookDto UpdateWebhookHeaders(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = UpdateWebhookHeadersWithHttpInfo(webhookId, webhookHeaders);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update a webhook request headers 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of WebhookDto</returns>
        public mailslurp.Client.ApiResponse<WebhookDto> UpdateWebhookHeadersWithHttpInfo(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0)
        {
            // verify the required parameter 'webhookHeaders' is set
            if (webhookHeaders == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'webhookHeaders' when calling WebhookControllerApi->UpdateWebhookHeaders");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            localVarRequestOptions.Data = webhookHeaders;

            localVarRequestOptions.Operation = "WebhookControllerApi.UpdateWebhookHeaders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<WebhookDto>("/webhooks/{webhookId}/headers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateWebhookHeaders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update a webhook request headers 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of WebhookDto</returns>
        public async System.Threading.Tasks.Task<WebhookDto> UpdateWebhookHeadersAsync(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<WebhookDto> localVarResponse = await UpdateWebhookHeadersWithHttpInfoAsync(webhookId, webhookHeaders, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update a webhook request headers 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId"></param>
        /// <param name="webhookHeaders"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (WebhookDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<WebhookDto>> UpdateWebhookHeadersWithHttpInfoAsync(Guid webhookId, WebhookHeaders webhookHeaders, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'webhookHeaders' is set
            if (webhookHeaders == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'webhookHeaders' when calling WebhookControllerApi->UpdateWebhookHeaders");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            localVarRequestOptions.Data = webhookHeaders;

            localVarRequestOptions.Operation = "WebhookControllerApi.UpdateWebhookHeaders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<WebhookDto>("/webhooks/{webhookId}/headers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateWebhookHeaders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Verify a webhook payload signature Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>VerifyWebhookSignatureResults</returns>
        public VerifyWebhookSignatureResults VerifyWebhookSignature(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<VerifyWebhookSignatureResults> localVarResponse = VerifyWebhookSignatureWithHttpInfo(verifyWebhookSignatureOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Verify a webhook payload signature Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of VerifyWebhookSignatureResults</returns>
        public mailslurp.Client.ApiResponse<VerifyWebhookSignatureResults> VerifyWebhookSignatureWithHttpInfo(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0)
        {
            // verify the required parameter 'verifyWebhookSignatureOptions' is set
            if (verifyWebhookSignatureOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'verifyWebhookSignatureOptions' when calling WebhookControllerApi->VerifyWebhookSignature");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = verifyWebhookSignatureOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.VerifyWebhookSignature";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<VerifyWebhookSignatureResults>("/webhooks/verify", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("VerifyWebhookSignature", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Verify a webhook payload signature Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of VerifyWebhookSignatureResults</returns>
        public async System.Threading.Tasks.Task<VerifyWebhookSignatureResults> VerifyWebhookSignatureAsync(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<VerifyWebhookSignatureResults> localVarResponse = await VerifyWebhookSignatureWithHttpInfoAsync(verifyWebhookSignatureOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Verify a webhook payload signature Verify a webhook payload using the messageId and signature. This allows you to be sure that MailSlurp sent the payload and not another server.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyWebhookSignatureOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (VerifyWebhookSignatureResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<VerifyWebhookSignatureResults>> VerifyWebhookSignatureWithHttpInfoAsync(VerifyWebhookSignatureOptions verifyWebhookSignatureOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'verifyWebhookSignatureOptions' is set
            if (verifyWebhookSignatureOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'verifyWebhookSignatureOptions' when calling WebhookControllerApi->VerifyWebhookSignature");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = verifyWebhookSignatureOptions;

            localVarRequestOptions.Operation = "WebhookControllerApi.VerifyWebhookSignature";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<VerifyWebhookSignatureResults>("/webhooks/verify", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("VerifyWebhookSignature", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;WebhookResultDto&gt;</returns>
        public List<WebhookResultDto> WaitForWebhookResults(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<WebhookResultDto>> localVarResponse = WaitForWebhookResultsWithHttpInfo(webhookId, expectedCount, timeout);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;WebhookResultDto&gt;</returns>
        public mailslurp.Client.ApiResponse<List<WebhookResultDto>> WaitForWebhookResultsWithHttpInfo(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expectedCount", expectedCount));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));

            localVarRequestOptions.Operation = "WebhookControllerApi.WaitForWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<WebhookResultDto>>("/webhooks/{webhookId}/wait", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;WebhookResultDto&gt;</returns>
        public async System.Threading.Tasks.Task<List<WebhookResultDto>> WaitForWebhookResultsAsync(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<WebhookResultDto>> localVarResponse = await WaitForWebhookResultsWithHttpInfoAsync(webhookId, expectedCount, timeout, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for webhook results for a webhook 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="webhookId">ID of webhook to get results for</param>
        /// <param name="expectedCount">Expected result count</param>
        /// <param name="timeout">Max time to wait in milliseconds</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;WebhookResultDto&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<WebhookResultDto>>> WaitForWebhookResultsWithHttpInfoAsync(Guid webhookId, int expectedCount, int timeout, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("webhookId", mailslurp.Client.ClientUtils.ParameterToString(webhookId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expectedCount", expectedCount));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));

            localVarRequestOptions.Operation = "WebhookControllerApi.WaitForWebhookResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<WebhookResultDto>>("/webhooks/{webhookId}/wait", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForWebhookResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/WaitForControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWaitForControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        List<EmailPreview> WaitFor(WaitForConditions waitForConditions, int operationIndex = 0);

        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        ApiResponse<List<EmailPreview>> WaitForWithHttpInfo(WaitForConditions waitForConditions, int operationIndex = 0);
        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs
        /// </summary>
        /// <remarks>
        /// If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        List<EmailPreview> WaitForEmailCount(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs
        /// </summary>
        /// <remarks>
        /// If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        ApiResponse<List<EmailPreview>> WaitForEmailCountWithHttpInfo(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);
        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive
        /// </summary>
        /// <remarks>
        /// Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email WaitForLatestEmail(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive
        /// </summary>
        /// <remarks>
        /// Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> WaitForLatestEmailWithHttpInfo(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);
        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmsDto</returns>
        SmsDto WaitForLatestSms(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0);

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmsDto</returns>
        ApiResponse<SmsDto> WaitForLatestSmsWithHttpInfo(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0);
        /// <summary>
        /// Wait or return list of emails that match simple matching patterns
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        List<EmailPreview> WaitForMatchingEmails(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        ApiResponse<List<EmailPreview>> WaitForMatchingEmailsWithHttpInfo(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email WaitForMatchingFirstEmail(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> WaitForMatchingFirstEmailWithHttpInfo(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);
        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur.
        /// </summary>
        /// <remarks>
        /// If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email WaitForNthEmail(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur.
        /// </summary>
        /// <remarks>
        /// If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> WaitForNthEmailWithHttpInfo(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0);
        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;SmsPreview&gt;</returns>
        List<SmsPreview> WaitForSms(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0);

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;SmsPreview&gt;</returns>
        ApiResponse<List<SmsPreview>> WaitForSmsWithHttpInfo(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWaitForControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        System.Threading.Tasks.Task<List<EmailPreview>> WaitForAsync(WaitForConditions waitForConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<EmailPreview>>> WaitForWithHttpInfoAsync(WaitForConditions waitForConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs
        /// </summary>
        /// <remarks>
        /// If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        System.Threading.Tasks.Task<List<EmailPreview>> WaitForEmailCountAsync(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs
        /// </summary>
        /// <remarks>
        /// If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<EmailPreview>>> WaitForEmailCountWithHttpInfoAsync(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive
        /// </summary>
        /// <remarks>
        /// Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> WaitForLatestEmailAsync(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive
        /// </summary>
        /// <remarks>
        /// Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> WaitForLatestEmailWithHttpInfoAsync(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmsDto</returns>
        System.Threading.Tasks.Task<SmsDto> WaitForLatestSmsAsync(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SmsDto>> WaitForLatestSmsWithHttpInfoAsync(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait or return list of emails that match simple matching patterns
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        System.Threading.Tasks.Task<List<EmailPreview>> WaitForMatchingEmailsAsync(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<EmailPreview>>> WaitForMatchingEmailsWithHttpInfoAsync(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> WaitForMatchingFirstEmailAsync(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array
        /// </summary>
        /// <remarks>
        /// Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> WaitForMatchingFirstEmailWithHttpInfoAsync(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur.
        /// </summary>
        /// <remarks>
        /// If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> WaitForNthEmailAsync(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur.
        /// </summary>
        /// <remarks>
        /// If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> WaitForNthEmailWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;SmsPreview&gt;</returns>
        System.Threading.Tasks.Task<List<SmsPreview>> WaitForSmsAsync(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword.
        /// </summary>
        /// <remarks>
        /// Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;SmsPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<SmsPreview>>> WaitForSmsWithHttpInfoAsync(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IWaitForControllerApi : IWaitForControllerApiSync, IWaitForControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public WaitForControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public WaitForControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public WaitForControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="WaitForControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public WaitForControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword. Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        public List<EmailPreview> WaitFor(WaitForConditions waitForConditions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = WaitForWithHttpInfo(waitForConditions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword. Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<EmailPreview>> WaitForWithHttpInfo(WaitForConditions waitForConditions, int operationIndex = 0)
        {
            // verify the required parameter 'waitForConditions' is set
            if (waitForConditions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForConditions' when calling WaitForControllerApi->WaitFor");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForConditions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitFor";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<EmailPreview>>("/waitFor", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitFor", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword. Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<EmailPreview>> WaitForAsync(WaitForConditions waitForConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = await WaitForWithHttpInfoAsync(waitForConditions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for an email to match the provided filter conditions such as subject contains keyword. Generic waitFor method that will wait until an inbox meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<EmailPreview>>> WaitForWithHttpInfoAsync(WaitForConditions waitForConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'waitForConditions' is set
            if (waitForConditions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForConditions' when calling WaitForControllerApi->WaitFor");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForConditions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitFor";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<EmailPreview>>("/waitFor", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitFor", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        public List<EmailPreview> WaitForEmailCount(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = WaitForEmailCountWithHttpInfo(inboxId, count, timeout, unreadOnly, before, since, sort, delay);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<EmailPreview>> WaitForEmailCountWithHttpInfo(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<EmailPreview>>("/waitForEmailCount", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<EmailPreview>> WaitForEmailCountAsync(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = await WaitForEmailCountWithHttpInfoAsync(inboxId, count, timeout, unreadOnly, before, since, sort, delay, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for and return count number of emails. Hold connection until inbox count matches expected or timeout occurs If inbox contains count or more emails at time of request then return count worth of emails. If not wait until the count is reached and return those or return an error if timeout is exceeded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater that 1</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<EmailPreview>>> WaitForEmailCountWithHttpInfoAsync(Guid inboxId, int count, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<EmailPreview>>("/waitForEmailCount", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email WaitForLatestEmail(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = WaitForLatestEmailWithHttpInfo(inboxId, timeout, unreadOnly, before, since, sort, delay);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> WaitForLatestEmailWithHttpInfo(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForLatestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/waitForLatestEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForLatestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> WaitForLatestEmailAsync(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await WaitForLatestEmailWithHttpInfoAsync(inboxId, timeout, unreadOnly, before, since, sort, delay, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Fetch inbox&#39;s latest email or if empty wait for an email to arrive Will return either the last received email or wait for an email to arrive and return that. If you need to wait for an email for a non-empty inbox set &#x60;unreadOnly&#x3D;true&#x60; or see the other receive methods such as &#x60;waitForNthEmail&#x60; or &#x60;waitForEmailCount&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only. (optional, default to false)</param>
        /// <param name="before">Filter for emails that were before after the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> WaitForLatestEmailWithHttpInfoAsync(Guid? inboxId = default(Guid?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForLatestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/waitForLatestEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForLatestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword. Wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmsDto</returns>
        public SmsDto WaitForLatestSms(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SmsDto> localVarResponse = WaitForLatestSmsWithHttpInfo(waitForSingleSmsOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword. Wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmsDto</returns>
        public mailslurp.Client.ApiResponse<SmsDto> WaitForLatestSmsWithHttpInfo(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0)
        {
            // verify the required parameter 'waitForSingleSmsOptions' is set
            if (waitForSingleSmsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForSingleSmsOptions' when calling WaitForControllerApi->WaitForLatestSms");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForSingleSmsOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForLatestSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SmsDto>("/waitForLatestSms", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForLatestSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword. Wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmsDto</returns>
        public async System.Threading.Tasks.Task<SmsDto> WaitForLatestSmsAsync(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SmsDto> localVarResponse = await WaitForLatestSmsWithHttpInfoAsync(waitForSingleSmsOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for the latest SMS message to match the provided filter conditions such as body contains keyword. Wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSingleSmsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SmsDto>> WaitForLatestSmsWithHttpInfoAsync(WaitForSingleSmsOptions waitForSingleSmsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'waitForSingleSmsOptions' is set
            if (waitForSingleSmsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForSingleSmsOptions' when calling WaitForControllerApi->WaitForLatestSms");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForSingleSmsOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForLatestSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SmsDto>("/waitForLatestSms", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForLatestSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        public List<EmailPreview> WaitForMatchingEmails(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = WaitForMatchingEmailsWithHttpInfo(inboxId, count, matchOptions, before, since, sort, delay, timeout, unreadOnly);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<EmailPreview>> WaitForMatchingEmailsWithHttpInfo(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0)
        {
            // verify the required parameter 'matchOptions' is set
            if (matchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'matchOptions' when calling WaitForControllerApi->WaitForMatchingEmails");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            localVarRequestOptions.Data = matchOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForMatchingEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<EmailPreview>>("/waitForMatchingEmails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForMatchingEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<EmailPreview>> WaitForMatchingEmailsAsync(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = await WaitForMatchingEmailsWithHttpInfoAsync(inboxId, count, matchOptions, before, since, sort, delay, timeout, unreadOnly, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait or return list of emails that match simple matching patterns Perform a search of emails in an inbox with the given patterns. If results match expected count then return or else retry the search until results are found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are fetching emails from</param>
        /// <param name="count">Number of emails to wait for. Must be greater or equal to 1</param>
        /// <param name="matchOptions"></param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<EmailPreview>>> WaitForMatchingEmailsWithHttpInfoAsync(Guid inboxId, int count, MatchOptions matchOptions, DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), string sort = default(string), long? delay = default(long?), long? timeout = default(long?), bool? unreadOnly = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'matchOptions' is set
            if (matchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'matchOptions' when calling WaitForControllerApi->WaitForMatchingEmails");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            localVarRequestOptions.Data = matchOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForMatchingEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<EmailPreview>>("/waitForMatchingEmails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForMatchingEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email WaitForMatchingFirstEmail(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = WaitForMatchingFirstEmailWithHttpInfo(inboxId, matchOptions, timeout, unreadOnly, since, before, sort, delay);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> WaitForMatchingFirstEmailWithHttpInfo(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            // verify the required parameter 'matchOptions' is set
            if (matchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'matchOptions' when calling WaitForControllerApi->WaitForMatchingFirstEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }
            localVarRequestOptions.Data = matchOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForMatchingFirstEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Email>("/waitForMatchingFirstEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForMatchingFirstEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> WaitForMatchingFirstEmailAsync(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await WaitForMatchingFirstEmailWithHttpInfoAsync(inboxId, matchOptions, timeout, unreadOnly, since, before, sort, delay, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for or return the first email that matches provided MatchOptions array Perform a search of emails in an inbox with the given patterns. If a result if found then return or else retry the search until a result is found or timeout is reached. Match options allow simple CONTAINS or EQUALS filtering on SUBJECT, TO, BCC, CC, and FROM. See the &#x60;MatchOptions&#x60; object for options. An example payload is &#x60;{ matches: [{field: &#39;SUBJECT&#39;,should:&#39;CONTAIN&#39;,value:&#39;needle&#39;}] }&#x60;. You can use an array of matches and they will be applied sequentially to filter out emails. If you want to perform matches and extractions of content using Regex patterns see the EmailController &#x60;getEmailContentMatch&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox we are matching an email for</param>
        /// <param name="matchOptions"></param>
        /// <param name="timeout">Max milliseconds to wait (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> WaitForMatchingFirstEmailWithHttpInfoAsync(Guid inboxId, MatchOptions matchOptions, long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'matchOptions' is set
            if (matchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'matchOptions' when calling WaitForControllerApi->WaitForMatchingFirstEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }
            localVarRequestOptions.Data = matchOptions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForMatchingFirstEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Email>("/waitForMatchingFirstEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForMatchingFirstEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur. If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email WaitForNthEmail(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = WaitForNthEmailWithHttpInfo(inboxId, index, timeout, unreadOnly, since, before, sort, delay);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur. If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> WaitForNthEmailWithHttpInfo(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (index != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForNthEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/waitForNthEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForNthEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur. If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> WaitForNthEmailAsync(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await WaitForNthEmailWithHttpInfoAsync(inboxId, index, timeout, unreadOnly, since, before, sort, delay, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for or fetch the email with a given index in the inbox specified. If index doesn&#39;t exist waits for it to exist or timeout to occur. If nth email is already present in inbox then return it. If not hold the connection open until timeout expires or the nth email is received and returned.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of the inbox you are fetching emails from (optional)</param>
        /// <param name="index">Zero based index of the email to wait for. If an inbox has 1 email already and you want to wait for the 2nd email pass index&#x3D;1 (optional, default to 0)</param>
        /// <param name="timeout">Max milliseconds to wait for the nth email if not already present (optional)</param>
        /// <param name="unreadOnly">Optional filter for unread only (optional, default to false)</param>
        /// <param name="since">Filter for emails that were received after the given timestamp (optional)</param>
        /// <param name="before">Filter for emails that were received before the given timestamp (optional)</param>
        /// <param name="sort">Sort direction (optional)</param>
        /// <param name="delay">Max milliseconds delay between calls (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> WaitForNthEmailWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? index = default(int?), long? timeout = default(long?), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string sort = default(string), long? delay = default(long?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (index != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (delay != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delay", delay));
            }

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForNthEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/waitForNthEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForNthEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword. Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;SmsPreview&gt;</returns>
        public List<SmsPreview> WaitForSms(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<SmsPreview>> localVarResponse = WaitForSmsWithHttpInfo(waitForSmsConditions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword. Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;SmsPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<SmsPreview>> WaitForSmsWithHttpInfo(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0)
        {
            // verify the required parameter 'waitForSmsConditions' is set
            if (waitForSmsConditions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForSmsConditions' when calling WaitForControllerApi->WaitForSms");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForSmsConditions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<SmsPreview>>("/waitForSms", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword. Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;SmsPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<SmsPreview>> WaitForSmsAsync(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<SmsPreview>> localVarResponse = await WaitForSmsWithHttpInfoAsync(waitForSmsConditions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for an SMS message to match the provided filter conditions such as body contains keyword. Generic waitFor method that will wait until a phone number meets given conditions or return immediately if already met
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="waitForSmsConditions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;SmsPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<SmsPreview>>> WaitForSmsWithHttpInfoAsync(WaitForSmsConditions waitForSmsConditions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'waitForSmsConditions' is set
            if (waitForSmsConditions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'waitForSmsConditions' when calling WaitForControllerApi->WaitForSms");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = waitForSmsConditions;

            localVarRequestOptions.Operation = "WaitForControllerApi.WaitForSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<SmsPreview>>("/waitForSms", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/UserControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IUserControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string GetJsonPropertyAsString(string property, Object body, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> GetJsonPropertyAsStringWithHttpInfo(string property, Object body, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get account information for your user
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UserInfoDto</returns>
        UserInfoDto GetUserInfo(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get account information for your user
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UserInfoDto</returns>
        ApiResponse<UserInfoDto> GetUserInfoWithHttpInfo(int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IUserControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> GetJsonPropertyAsStringAsync(string property, Object body, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> GetJsonPropertyAsStringWithHttpInfoAsync(string property, Object body, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get account information for your user
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UserInfoDto</returns>
        System.Threading.Tasks.Task<UserInfoDto> GetUserInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get account information for your user
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UserInfoDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<UserInfoDto>> GetUserInfoWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IUserControllerApi : IUserControllerApiSync, IUserControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="UserControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public UserControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="UserControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public UserControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="UserControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public UserControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="UserControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public UserControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        ///  Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string GetJsonPropertyAsString(string property, Object body, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = GetJsonPropertyAsStringWithHttpInfo(property, body);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> GetJsonPropertyAsStringWithHttpInfo(string property, Object body, int operationIndex = 0)
        {
            // verify the required parameter 'property' is set
            if (property == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'property' when calling UserControllerApi->GetJsonPropertyAsString");
            }

            // verify the required parameter 'body' is set
            if (body == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'body' when calling UserControllerApi->GetJsonPropertyAsString");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "property", property));
            localVarRequestOptions.Data = body;

            localVarRequestOptions.Operation = "UserControllerApi.GetJsonPropertyAsString";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<string>("/user/json/pluck", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonPropertyAsString", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> GetJsonPropertyAsStringAsync(string property, Object body, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await GetJsonPropertyAsStringWithHttpInfoAsync(property, body, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Utility function to extract properties from JSON objects in language where this is cumbersome.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="property">JSON property name or dot separated path selector such as &#x60;a.b.c&#x60;</param>
        /// <param name="body"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> GetJsonPropertyAsStringWithHttpInfoAsync(string property, Object body, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'property' is set
            if (property == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'property' when calling UserControllerApi->GetJsonPropertyAsString");
            }

            // verify the required parameter 'body' is set
            if (body == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'body' when calling UserControllerApi->GetJsonPropertyAsString");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "property", property));
            localVarRequestOptions.Data = body;

            localVarRequestOptions.Operation = "UserControllerApi.GetJsonPropertyAsString";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<string>("/user/json/pluck", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetJsonPropertyAsString", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get account information for your user
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UserInfoDto</returns>
        public UserInfoDto GetUserInfo(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<UserInfoDto> localVarResponse = GetUserInfoWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get account information for your user
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UserInfoDto</returns>
        public mailslurp.Client.ApiResponse<UserInfoDto> GetUserInfoWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "UserControllerApi.GetUserInfo";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<UserInfoDto>("/user/info", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUserInfo", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get account information for your user
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UserInfoDto</returns>
        public async System.Threading.Tasks.Task<UserInfoDto> GetUserInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<UserInfoDto> localVarResponse = await GetUserInfoWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get account information for your user
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UserInfoDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<UserInfoDto>> GetUserInfoWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "UserControllerApi.GetUserInfo";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<UserInfoDto>("/user/info", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUserInfo", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/TrackingControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITrackingControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create tracking pixel
        /// </summary>
        /// <remarks>
        /// Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TrackingPixelDto</returns>
        TrackingPixelDto CreateTrackingPixel(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0);

        /// <summary>
        /// Create tracking pixel
        /// </summary>
        /// <remarks>
        /// Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TrackingPixelDto</returns>
        ApiResponse<TrackingPixelDto> CreateTrackingPixelWithHttpInfo(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0);
        /// <summary>
        /// Get tracking pixels
        /// </summary>
        /// <remarks>
        /// List tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        PageTrackingPixelProjection GetAllTrackingPixels(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get tracking pixels
        /// </summary>
        /// <remarks>
        /// List tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        ApiResponse<PageTrackingPixelProjection> GetAllTrackingPixelsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get pixel
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TrackingPixelDto</returns>
        TrackingPixelDto GetTrackingPixel(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get pixel
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TrackingPixelDto</returns>
        ApiResponse<TrackingPixelDto> GetTrackingPixelWithHttpInfo(Guid id, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITrackingControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create tracking pixel
        /// </summary>
        /// <remarks>
        /// Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TrackingPixelDto</returns>
        System.Threading.Tasks.Task<TrackingPixelDto> CreateTrackingPixelAsync(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create tracking pixel
        /// </summary>
        /// <remarks>
        /// Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TrackingPixelDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<TrackingPixelDto>> CreateTrackingPixelWithHttpInfoAsync(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get tracking pixels
        /// </summary>
        /// <remarks>
        /// List tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        System.Threading.Tasks.Task<PageTrackingPixelProjection> GetAllTrackingPixelsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get tracking pixels
        /// </summary>
        /// <remarks>
        /// List tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageTrackingPixelProjection>> GetAllTrackingPixelsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get pixel
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TrackingPixelDto</returns>
        System.Threading.Tasks.Task<TrackingPixelDto> GetTrackingPixelAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get pixel
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TrackingPixelDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<TrackingPixelDto>> GetTrackingPixelWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITrackingControllerApi : ITrackingControllerApiSync, ITrackingControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public TrackingControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public TrackingControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public TrackingControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TrackingControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public TrackingControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create tracking pixel Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TrackingPixelDto</returns>
        public TrackingPixelDto CreateTrackingPixel(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TrackingPixelDto> localVarResponse = CreateTrackingPixelWithHttpInfo(createTrackingPixelOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create tracking pixel Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TrackingPixelDto</returns>
        public mailslurp.Client.ApiResponse<TrackingPixelDto> CreateTrackingPixelWithHttpInfo(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createTrackingPixelOptions' is set
            if (createTrackingPixelOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTrackingPixelOptions' when calling TrackingControllerApi->CreateTrackingPixel");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createTrackingPixelOptions;

            localVarRequestOptions.Operation = "TrackingControllerApi.CreateTrackingPixel";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<TrackingPixelDto>("/tracking/pixels", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateTrackingPixel", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create tracking pixel Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TrackingPixelDto</returns>
        public async System.Threading.Tasks.Task<TrackingPixelDto> CreateTrackingPixelAsync(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TrackingPixelDto> localVarResponse = await CreateTrackingPixelWithHttpInfoAsync(createTrackingPixelOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create tracking pixel Create a tracking pixel. A tracking pixel is an image that can be embedded in an email. When the email is viewed and the image is seen MailSlurp will mark the pixel as seen. Use tracking pixels to monitor email open events. You can receive open notifications via webhook or by fetching the pixel.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTrackingPixelOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TrackingPixelDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TrackingPixelDto>> CreateTrackingPixelWithHttpInfoAsync(CreateTrackingPixelOptions createTrackingPixelOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createTrackingPixelOptions' is set
            if (createTrackingPixelOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTrackingPixelOptions' when calling TrackingControllerApi->CreateTrackingPixel");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createTrackingPixelOptions;

            localVarRequestOptions.Operation = "TrackingControllerApi.CreateTrackingPixel";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<TrackingPixelDto>("/tracking/pixels", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateTrackingPixel", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get tracking pixels List tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        public PageTrackingPixelProjection GetAllTrackingPixels(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = GetAllTrackingPixelsWithHttpInfo(page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get tracking pixels List tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        public mailslurp.Client.ApiResponse<PageTrackingPixelProjection> GetAllTrackingPixelsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "TrackingControllerApi.GetAllTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageTrackingPixelProjection>("/tracking/pixels", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get tracking pixels List tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        public async System.Threading.Tasks.Task<PageTrackingPixelProjection> GetAllTrackingPixelsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = await GetAllTrackingPixelsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get tracking pixels List tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageTrackingPixelProjection>> GetAllTrackingPixelsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "TrackingControllerApi.GetAllTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageTrackingPixelProjection>("/tracking/pixels", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get pixel 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TrackingPixelDto</returns>
        public TrackingPixelDto GetTrackingPixel(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TrackingPixelDto> localVarResponse = GetTrackingPixelWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get pixel 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TrackingPixelDto</returns>
        public mailslurp.Client.ApiResponse<TrackingPixelDto> GetTrackingPixelWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "TrackingControllerApi.GetTrackingPixel";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<TrackingPixelDto>("/tracking/pixels/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTrackingPixel", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get pixel 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TrackingPixelDto</returns>
        public async System.Threading.Tasks.Task<TrackingPixelDto> GetTrackingPixelAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TrackingPixelDto> localVarResponse = await GetTrackingPixelWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get pixel 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TrackingPixelDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TrackingPixelDto>> GetTrackingPixelWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "TrackingControllerApi.GetTrackingPixel";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<TrackingPixelDto>("/tracking/pixels/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTrackingPixel", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ToolsControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IToolsControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Check email client support for email HTML and CSS features
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailFeaturesClientSupportResults</returns>
        CheckEmailFeaturesClientSupportResults CheckEmailFeaturesClientSupport(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0);

        /// <summary>
        /// Check email client support for email HTML and CSS features
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailFeaturesClientSupportResults</returns>
        ApiResponse<CheckEmailFeaturesClientSupportResults> CheckEmailFeaturesClientSupportWithHttpInfo(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0);
        /// <summary>
        /// Create a new email address using the fake email domains
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>NewFakeEmailAddressResult</returns>
        NewFakeEmailAddressResult CreateNewFakeEmailAddress(int operationIndex = 0);

        /// <summary>
        /// Create a new email address using the fake email domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of NewFakeEmailAddressResult</returns>
        ApiResponse<NewFakeEmailAddressResult> CreateNewFakeEmailAddressWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Create a BIMI record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateBimiRecordResults</returns>
        GenerateBimiRecordResults GenerateBimiRecord(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0);

        /// <summary>
        /// Create a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateBimiRecordResults</returns>
        ApiResponse<GenerateBimiRecordResults> GenerateBimiRecordWithHttpInfo(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0);
        /// <summary>
        /// Create a DMARC record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateDmarcRecordResults</returns>
        GenerateDmarcRecordResults GenerateDmarcRecord(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0);

        /// <summary>
        /// Create a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateDmarcRecordResults</returns>
        ApiResponse<GenerateDmarcRecordResults> GenerateDmarcRecordWithHttpInfo(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0);
        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateMtaStsRecordResults</returns>
        GenerateMtaStsRecordResults GenerateMtaStsRecord(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0);

        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateMtaStsRecordResults</returns>
        ApiResponse<GenerateMtaStsRecordResults> GenerateMtaStsRecordWithHttpInfo(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0);
        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateTlsReportingRecordResults</returns>
        GenerateTlsReportingRecordResults GenerateTlsReportingRecord(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0);

        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateTlsReportingRecordResults</returns>
        ApiResponse<GenerateTlsReportingRecordResults> GenerateTlsReportingRecordWithHttpInfo(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FakeEmailResult</returns>
        FakeEmailResult GetFakeEmailById(Guid id, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FakeEmailResult</returns>
        ApiResponse<FakeEmailResult> GetFakeEmailByIdWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;FakeEmailPreview&gt;</returns>
        List<FakeEmailPreview> GetFakeEmailsForAddress(string emailAddress, int? page = default(int?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;FakeEmailPreview&gt;</returns>
        ApiResponse<List<FakeEmailPreview>> GetFakeEmailsForAddressWithHttpInfo(string emailAddress, int? page = default(int?), int operationIndex = 0);
        /// <summary>
        /// Lookup a BIMI record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupBimiDomainResults</returns>
        LookupBimiDomainResults LookupBimiDomain(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupBimiDomainResults</returns>
        ApiResponse<LookupBimiDomainResults> LookupBimiDomainWithHttpInfo(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0);
        /// <summary>
        /// Lookup a DMARC record policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupDmarcDomainResults</returns>
        LookupDmarcDomainResults LookupDmarcDomain(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupDmarcDomainResults</returns>
        ApiResponse<LookupDmarcDomainResults> LookupDmarcDomainWithHttpInfo(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0);
        /// <summary>
        /// Lookup a MTA-STS domain policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupMtaStsDomainResults</returns>
        LookupMtaStsDomainResults LookupMtaStsDomain(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup a MTA-STS domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupMtaStsDomainResults</returns>
        ApiResponse<LookupMtaStsDomainResults> LookupMtaStsDomainWithHttpInfo(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0);
        /// <summary>
        /// Lookup a TLS reporting domain policy
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupTlsReportingDomainResults</returns>
        LookupTlsReportingDomainResults LookupTlsReportingDomain(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup a TLS reporting domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupTlsReportingDomainResults</returns>
        ApiResponse<LookupTlsReportingDomainResults> LookupTlsReportingDomainWithHttpInfo(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IToolsControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Check email client support for email HTML and CSS features
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailFeaturesClientSupportResults</returns>
        System.Threading.Tasks.Task<CheckEmailFeaturesClientSupportResults> CheckEmailFeaturesClientSupportAsync(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Check email client support for email HTML and CSS features
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailFeaturesClientSupportResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<CheckEmailFeaturesClientSupportResults>> CheckEmailFeaturesClientSupportWithHttpInfoAsync(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a new email address using the fake email domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of NewFakeEmailAddressResult</returns>
        System.Threading.Tasks.Task<NewFakeEmailAddressResult> CreateNewFakeEmailAddressAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a new email address using the fake email domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (NewFakeEmailAddressResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<NewFakeEmailAddressResult>> CreateNewFakeEmailAddressWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateBimiRecordResults</returns>
        System.Threading.Tasks.Task<GenerateBimiRecordResults> GenerateBimiRecordAsync(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateBimiRecordResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<GenerateBimiRecordResults>> GenerateBimiRecordWithHttpInfoAsync(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateDmarcRecordResults</returns>
        System.Threading.Tasks.Task<GenerateDmarcRecordResults> GenerateDmarcRecordAsync(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateDmarcRecordResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<GenerateDmarcRecordResults>> GenerateDmarcRecordWithHttpInfoAsync(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateMtaStsRecordResults</returns>
        System.Threading.Tasks.Task<GenerateMtaStsRecordResults> GenerateMtaStsRecordAsync(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateMtaStsRecordResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<GenerateMtaStsRecordResults>> GenerateMtaStsRecordWithHttpInfoAsync(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateTlsReportingRecordResults</returns>
        System.Threading.Tasks.Task<GenerateTlsReportingRecordResults> GenerateTlsReportingRecordAsync(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a TLS reporting record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateTlsReportingRecordResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<GenerateTlsReportingRecordResults>> GenerateTlsReportingRecordWithHttpInfoAsync(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FakeEmailResult</returns>
        System.Threading.Tasks.Task<FakeEmailResult> GetFakeEmailByIdAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FakeEmailResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<FakeEmailResult>> GetFakeEmailByIdWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;FakeEmailPreview&gt;</returns>
        System.Threading.Tasks.Task<List<FakeEmailPreview>> GetFakeEmailsForAddressAsync(string emailAddress, int? page = default(int?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;FakeEmailPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<FakeEmailPreview>>> GetFakeEmailsForAddressWithHttpInfoAsync(string emailAddress, int? page = default(int?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupBimiDomainResults</returns>
        System.Threading.Tasks.Task<LookupBimiDomainResults> LookupBimiDomainAsync(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup a BIMI record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupBimiDomainResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<LookupBimiDomainResults>> LookupBimiDomainWithHttpInfoAsync(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupDmarcDomainResults</returns>
        System.Threading.Tasks.Task<LookupDmarcDomainResults> LookupDmarcDomainAsync(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup a DMARC record policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupDmarcDomainResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<LookupDmarcDomainResults>> LookupDmarcDomainWithHttpInfoAsync(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup a MTA-STS domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupMtaStsDomainResults</returns>
        System.Threading.Tasks.Task<LookupMtaStsDomainResults> LookupMtaStsDomainAsync(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup a MTA-STS domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupMtaStsDomainResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<LookupMtaStsDomainResults>> LookupMtaStsDomainWithHttpInfoAsync(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup a TLS reporting domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupTlsReportingDomainResults</returns>
        System.Threading.Tasks.Task<LookupTlsReportingDomainResults> LookupTlsReportingDomainAsync(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup a TLS reporting domain policy
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupTlsReportingDomainResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<LookupTlsReportingDomainResults>> LookupTlsReportingDomainWithHttpInfoAsync(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IToolsControllerApi : IToolsControllerApiSync, IToolsControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ToolsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ToolsControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ToolsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ToolsControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ToolsControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ToolsControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ToolsControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ToolsControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Check email client support for email HTML and CSS features 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailFeaturesClientSupportResults</returns>
        public CheckEmailFeaturesClientSupportResults CheckEmailFeaturesClientSupport(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CheckEmailFeaturesClientSupportResults> localVarResponse = CheckEmailFeaturesClientSupportWithHttpInfo(checkEmailFeaturesClientSupportOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Check email client support for email HTML and CSS features 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailFeaturesClientSupportResults</returns>
        public mailslurp.Client.ApiResponse<CheckEmailFeaturesClientSupportResults> CheckEmailFeaturesClientSupportWithHttpInfo(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0)
        {
            // verify the required parameter 'checkEmailFeaturesClientSupportOptions' is set
            if (checkEmailFeaturesClientSupportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'checkEmailFeaturesClientSupportOptions' when calling ToolsControllerApi->CheckEmailFeaturesClientSupport");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = checkEmailFeaturesClientSupportOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.CheckEmailFeaturesClientSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<CheckEmailFeaturesClientSupportResults>("/tools/check-email-features-client-support", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailFeaturesClientSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Check email client support for email HTML and CSS features 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailFeaturesClientSupportResults</returns>
        public async System.Threading.Tasks.Task<CheckEmailFeaturesClientSupportResults> CheckEmailFeaturesClientSupportAsync(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CheckEmailFeaturesClientSupportResults> localVarResponse = await CheckEmailFeaturesClientSupportWithHttpInfoAsync(checkEmailFeaturesClientSupportOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Check email client support for email HTML and CSS features 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailFeaturesClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailFeaturesClientSupportResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CheckEmailFeaturesClientSupportResults>> CheckEmailFeaturesClientSupportWithHttpInfoAsync(CheckEmailFeaturesClientSupportOptions checkEmailFeaturesClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'checkEmailFeaturesClientSupportOptions' is set
            if (checkEmailFeaturesClientSupportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'checkEmailFeaturesClientSupportOptions' when calling ToolsControllerApi->CheckEmailFeaturesClientSupport");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = checkEmailFeaturesClientSupportOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.CheckEmailFeaturesClientSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<CheckEmailFeaturesClientSupportResults>("/tools/check-email-features-client-support", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailFeaturesClientSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a new email address using the fake email domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>NewFakeEmailAddressResult</returns>
        public NewFakeEmailAddressResult CreateNewFakeEmailAddress(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<NewFakeEmailAddressResult> localVarResponse = CreateNewFakeEmailAddressWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a new email address using the fake email domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of NewFakeEmailAddressResult</returns>
        public mailslurp.Client.ApiResponse<NewFakeEmailAddressResult> CreateNewFakeEmailAddressWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ToolsControllerApi.CreateNewFakeEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<NewFakeEmailAddressResult>("/tools/fake-email", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewFakeEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a new email address using the fake email domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of NewFakeEmailAddressResult</returns>
        public async System.Threading.Tasks.Task<NewFakeEmailAddressResult> CreateNewFakeEmailAddressAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<NewFakeEmailAddressResult> localVarResponse = await CreateNewFakeEmailAddressWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a new email address using the fake email domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (NewFakeEmailAddressResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<NewFakeEmailAddressResult>> CreateNewFakeEmailAddressWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ToolsControllerApi.CreateNewFakeEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<NewFakeEmailAddressResult>("/tools/fake-email", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewFakeEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateBimiRecordResults</returns>
        public GenerateBimiRecordResults GenerateBimiRecord(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GenerateBimiRecordResults> localVarResponse = GenerateBimiRecordWithHttpInfo(generateBimiRecordOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateBimiRecordResults</returns>
        public mailslurp.Client.ApiResponse<GenerateBimiRecordResults> GenerateBimiRecordWithHttpInfo(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0)
        {
            // verify the required parameter 'generateBimiRecordOptions' is set
            if (generateBimiRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateBimiRecordOptions' when calling ToolsControllerApi->GenerateBimiRecord");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateBimiRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateBimiRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<GenerateBimiRecordResults>("/tools/generate-bimi-record", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateBimiRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateBimiRecordResults</returns>
        public async System.Threading.Tasks.Task<GenerateBimiRecordResults> GenerateBimiRecordAsync(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GenerateBimiRecordResults> localVarResponse = await GenerateBimiRecordWithHttpInfoAsync(generateBimiRecordOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateBimiRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateBimiRecordResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GenerateBimiRecordResults>> GenerateBimiRecordWithHttpInfoAsync(GenerateBimiRecordOptions generateBimiRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'generateBimiRecordOptions' is set
            if (generateBimiRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateBimiRecordOptions' when calling ToolsControllerApi->GenerateBimiRecord");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateBimiRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateBimiRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<GenerateBimiRecordResults>("/tools/generate-bimi-record", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateBimiRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateDmarcRecordResults</returns>
        public GenerateDmarcRecordResults GenerateDmarcRecord(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GenerateDmarcRecordResults> localVarResponse = GenerateDmarcRecordWithHttpInfo(generateDmarcRecordOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateDmarcRecordResults</returns>
        public mailslurp.Client.ApiResponse<GenerateDmarcRecordResults> GenerateDmarcRecordWithHttpInfo(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0)
        {
            // verify the required parameter 'generateDmarcRecordOptions' is set
            if (generateDmarcRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateDmarcRecordOptions' when calling ToolsControllerApi->GenerateDmarcRecord");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateDmarcRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateDmarcRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<GenerateDmarcRecordResults>("/tools/generate-dmarc-record", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateDmarcRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateDmarcRecordResults</returns>
        public async System.Threading.Tasks.Task<GenerateDmarcRecordResults> GenerateDmarcRecordAsync(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GenerateDmarcRecordResults> localVarResponse = await GenerateDmarcRecordWithHttpInfoAsync(generateDmarcRecordOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateDmarcRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateDmarcRecordResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GenerateDmarcRecordResults>> GenerateDmarcRecordWithHttpInfoAsync(GenerateDmarcRecordOptions generateDmarcRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'generateDmarcRecordOptions' is set
            if (generateDmarcRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateDmarcRecordOptions' when calling ToolsControllerApi->GenerateDmarcRecord");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateDmarcRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateDmarcRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<GenerateDmarcRecordResults>("/tools/generate-dmarc-record", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateDmarcRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateMtaStsRecordResults</returns>
        public GenerateMtaStsRecordResults GenerateMtaStsRecord(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GenerateMtaStsRecordResults> localVarResponse = GenerateMtaStsRecordWithHttpInfo(generateMtaStsRecordOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateMtaStsRecordResults</returns>
        public mailslurp.Client.ApiResponse<GenerateMtaStsRecordResults> GenerateMtaStsRecordWithHttpInfo(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0)
        {
            // verify the required parameter 'generateMtaStsRecordOptions' is set
            if (generateMtaStsRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateMtaStsRecordOptions' when calling ToolsControllerApi->GenerateMtaStsRecord");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateMtaStsRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateMtaStsRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<GenerateMtaStsRecordResults>("/tools/generate-mta-sts-record", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateMtaStsRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateMtaStsRecordResults</returns>
        public async System.Threading.Tasks.Task<GenerateMtaStsRecordResults> GenerateMtaStsRecordAsync(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GenerateMtaStsRecordResults> localVarResponse = await GenerateMtaStsRecordWithHttpInfoAsync(generateMtaStsRecordOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateMtaStsRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateMtaStsRecordResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GenerateMtaStsRecordResults>> GenerateMtaStsRecordWithHttpInfoAsync(GenerateMtaStsRecordOptions generateMtaStsRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'generateMtaStsRecordOptions' is set
            if (generateMtaStsRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateMtaStsRecordOptions' when calling ToolsControllerApi->GenerateMtaStsRecord");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateMtaStsRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateMtaStsRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<GenerateMtaStsRecordResults>("/tools/generate-mta-sts-record", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateMtaStsRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GenerateTlsReportingRecordResults</returns>
        public GenerateTlsReportingRecordResults GenerateTlsReportingRecord(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GenerateTlsReportingRecordResults> localVarResponse = GenerateTlsReportingRecordWithHttpInfo(generateTlsReportingRecordOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GenerateTlsReportingRecordResults</returns>
        public mailslurp.Client.ApiResponse<GenerateTlsReportingRecordResults> GenerateTlsReportingRecordWithHttpInfo(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0)
        {
            // verify the required parameter 'generateTlsReportingRecordOptions' is set
            if (generateTlsReportingRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateTlsReportingRecordOptions' when calling ToolsControllerApi->GenerateTlsReportingRecord");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateTlsReportingRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateTlsReportingRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<GenerateTlsReportingRecordResults>("/tools/generate-tls-reporting-record", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateTlsReportingRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GenerateTlsReportingRecordResults</returns>
        public async System.Threading.Tasks.Task<GenerateTlsReportingRecordResults> GenerateTlsReportingRecordAsync(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GenerateTlsReportingRecordResults> localVarResponse = await GenerateTlsReportingRecordWithHttpInfoAsync(generateTlsReportingRecordOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a TLS reporting record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="generateTlsReportingRecordOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GenerateTlsReportingRecordResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GenerateTlsReportingRecordResults>> GenerateTlsReportingRecordWithHttpInfoAsync(GenerateTlsReportingRecordOptions generateTlsReportingRecordOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'generateTlsReportingRecordOptions' is set
            if (generateTlsReportingRecordOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'generateTlsReportingRecordOptions' when calling ToolsControllerApi->GenerateTlsReportingRecord");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = generateTlsReportingRecordOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.GenerateTlsReportingRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<GenerateTlsReportingRecordResults>("/tools/generate-tls-reporting-record", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GenerateTlsReportingRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FakeEmailResult</returns>
        public FakeEmailResult GetFakeEmailById(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<FakeEmailResult> localVarResponse = GetFakeEmailByIdWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FakeEmailResult</returns>
        public mailslurp.Client.ApiResponse<FakeEmailResult> GetFakeEmailByIdWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "id", id));

            localVarRequestOptions.Operation = "ToolsControllerApi.GetFakeEmailById";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<FakeEmailResult>("/tools/fake-email", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetFakeEmailById", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FakeEmailResult</returns>
        public async System.Threading.Tasks.Task<FakeEmailResult> GetFakeEmailByIdAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<FakeEmailResult> localVarResponse = await GetFakeEmailByIdWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FakeEmailResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<FakeEmailResult>> GetFakeEmailByIdWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "id", id));

            localVarRequestOptions.Operation = "ToolsControllerApi.GetFakeEmailById";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<FakeEmailResult>("/tools/fake-email", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetFakeEmailById", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;FakeEmailPreview&gt;</returns>
        public List<FakeEmailPreview> GetFakeEmailsForAddress(string emailAddress, int? page = default(int?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<FakeEmailPreview>> localVarResponse = GetFakeEmailsForAddressWithHttpInfo(emailAddress, page);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;FakeEmailPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<FakeEmailPreview>> GetFakeEmailsForAddressWithHttpInfo(string emailAddress, int? page = default(int?), int operationIndex = 0)
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling ToolsControllerApi->GetFakeEmailsForAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "ToolsControllerApi.GetFakeEmailsForAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<FakeEmailPreview>>("/tools/fake-emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetFakeEmailsForAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;FakeEmailPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<FakeEmailPreview>> GetFakeEmailsForAddressAsync(string emailAddress, int? page = default(int?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<FakeEmailPreview>> localVarResponse = await GetFakeEmailsForAddressWithHttpInfoAsync(emailAddress, page, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="page"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;FakeEmailPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<FakeEmailPreview>>> GetFakeEmailsForAddressWithHttpInfoAsync(string emailAddress, int? page = default(int?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling ToolsControllerApi->GetFakeEmailsForAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "ToolsControllerApi.GetFakeEmailsForAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<FakeEmailPreview>>("/tools/fake-emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetFakeEmailsForAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupBimiDomainResults</returns>
        public LookupBimiDomainResults LookupBimiDomain(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<LookupBimiDomainResults> localVarResponse = LookupBimiDomainWithHttpInfo(lookupBimiDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupBimiDomainResults</returns>
        public mailslurp.Client.ApiResponse<LookupBimiDomainResults> LookupBimiDomainWithHttpInfo(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'lookupBimiDomainOptions' is set
            if (lookupBimiDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupBimiDomainOptions' when calling ToolsControllerApi->LookupBimiDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupBimiDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupBimiDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<LookupBimiDomainResults>("/tools/lookup-bimi-domain", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupBimiDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupBimiDomainResults</returns>
        public async System.Threading.Tasks.Task<LookupBimiDomainResults> LookupBimiDomainAsync(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<LookupBimiDomainResults> localVarResponse = await LookupBimiDomainWithHttpInfoAsync(lookupBimiDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a BIMI record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupBimiDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupBimiDomainResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<LookupBimiDomainResults>> LookupBimiDomainWithHttpInfoAsync(LookupBimiDomainOptions lookupBimiDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'lookupBimiDomainOptions' is set
            if (lookupBimiDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupBimiDomainOptions' when calling ToolsControllerApi->LookupBimiDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupBimiDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupBimiDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<LookupBimiDomainResults>("/tools/lookup-bimi-domain", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupBimiDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupDmarcDomainResults</returns>
        public LookupDmarcDomainResults LookupDmarcDomain(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<LookupDmarcDomainResults> localVarResponse = LookupDmarcDomainWithHttpInfo(lookupDmarcDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupDmarcDomainResults</returns>
        public mailslurp.Client.ApiResponse<LookupDmarcDomainResults> LookupDmarcDomainWithHttpInfo(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'lookupDmarcDomainOptions' is set
            if (lookupDmarcDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupDmarcDomainOptions' when calling ToolsControllerApi->LookupDmarcDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupDmarcDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupDmarcDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<LookupDmarcDomainResults>("/tools/lookup-dmarc-domain", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupDmarcDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupDmarcDomainResults</returns>
        public async System.Threading.Tasks.Task<LookupDmarcDomainResults> LookupDmarcDomainAsync(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<LookupDmarcDomainResults> localVarResponse = await LookupDmarcDomainWithHttpInfoAsync(lookupDmarcDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a DMARC record policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupDmarcDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupDmarcDomainResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<LookupDmarcDomainResults>> LookupDmarcDomainWithHttpInfoAsync(LookupDmarcDomainOptions lookupDmarcDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'lookupDmarcDomainOptions' is set
            if (lookupDmarcDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupDmarcDomainOptions' when calling ToolsControllerApi->LookupDmarcDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupDmarcDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupDmarcDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<LookupDmarcDomainResults>("/tools/lookup-dmarc-domain", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupDmarcDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a MTA-STS domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupMtaStsDomainResults</returns>
        public LookupMtaStsDomainResults LookupMtaStsDomain(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<LookupMtaStsDomainResults> localVarResponse = LookupMtaStsDomainWithHttpInfo(lookupMtaStsDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a MTA-STS domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupMtaStsDomainResults</returns>
        public mailslurp.Client.ApiResponse<LookupMtaStsDomainResults> LookupMtaStsDomainWithHttpInfo(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'lookupMtaStsDomainOptions' is set
            if (lookupMtaStsDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupMtaStsDomainOptions' when calling ToolsControllerApi->LookupMtaStsDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupMtaStsDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupMtaStsDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<LookupMtaStsDomainResults>("/tools/lookup-mta-sts-domain", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupMtaStsDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a MTA-STS domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupMtaStsDomainResults</returns>
        public async System.Threading.Tasks.Task<LookupMtaStsDomainResults> LookupMtaStsDomainAsync(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<LookupMtaStsDomainResults> localVarResponse = await LookupMtaStsDomainWithHttpInfoAsync(lookupMtaStsDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a MTA-STS domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupMtaStsDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupMtaStsDomainResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<LookupMtaStsDomainResults>> LookupMtaStsDomainWithHttpInfoAsync(LookupMtaStsDomainOptions lookupMtaStsDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'lookupMtaStsDomainOptions' is set
            if (lookupMtaStsDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupMtaStsDomainOptions' when calling ToolsControllerApi->LookupMtaStsDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupMtaStsDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupMtaStsDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<LookupMtaStsDomainResults>("/tools/lookup-mta-sts-domain", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupMtaStsDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a TLS reporting domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>LookupTlsReportingDomainResults</returns>
        public LookupTlsReportingDomainResults LookupTlsReportingDomain(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<LookupTlsReportingDomainResults> localVarResponse = LookupTlsReportingDomainWithHttpInfo(lookupTlsReportingDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a TLS reporting domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of LookupTlsReportingDomainResults</returns>
        public mailslurp.Client.ApiResponse<LookupTlsReportingDomainResults> LookupTlsReportingDomainWithHttpInfo(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'lookupTlsReportingDomainOptions' is set
            if (lookupTlsReportingDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupTlsReportingDomainOptions' when calling ToolsControllerApi->LookupTlsReportingDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupTlsReportingDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupTlsReportingDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<LookupTlsReportingDomainResults>("/tools/lookup-tls-reporting-domain", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupTlsReportingDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup a TLS reporting domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of LookupTlsReportingDomainResults</returns>
        public async System.Threading.Tasks.Task<LookupTlsReportingDomainResults> LookupTlsReportingDomainAsync(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<LookupTlsReportingDomainResults> localVarResponse = await LookupTlsReportingDomainWithHttpInfoAsync(lookupTlsReportingDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup a TLS reporting domain policy 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="lookupTlsReportingDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (LookupTlsReportingDomainResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<LookupTlsReportingDomainResults>> LookupTlsReportingDomainWithHttpInfoAsync(LookupTlsReportingDomainOptions lookupTlsReportingDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'lookupTlsReportingDomainOptions' is set
            if (lookupTlsReportingDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'lookupTlsReportingDomainOptions' when calling ToolsControllerApi->LookupTlsReportingDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = lookupTlsReportingDomainOptions;

            localVarRequestOptions.Operation = "ToolsControllerApi.LookupTlsReportingDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<LookupTlsReportingDomainResults>("/tools/lookup-tls-reporting-domain", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("LookupTlsReportingDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/TemplateControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITemplateControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create a Template
        /// </summary>
        /// <remarks>
        /// Create an email template with variables for use with templated transactional emails.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        TemplateDto CreateTemplate(CreateTemplateOptions createTemplateOptions, int operationIndex = 0);

        /// <summary>
        /// Create a Template
        /// </summary>
        /// <remarks>
        /// Create an email template with variables for use with templated transactional emails.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        ApiResponse<TemplateDto> CreateTemplateWithHttpInfo(CreateTemplateOptions createTemplateOptions, int operationIndex = 0);
        /// <summary>
        /// Delete email template
        /// </summary>
        /// <remarks>
        /// Delete template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteTemplate(Guid templateId, int operationIndex = 0);

        /// <summary>
        /// Delete email template
        /// </summary>
        /// <remarks>
        /// Delete template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteTemplateWithHttpInfo(Guid templateId, int operationIndex = 0);
        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates in paginated format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTemplateProjection</returns>
        PageTemplateProjection GetAllTemplates(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates in paginated format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTemplateProjection</returns>
        ApiResponse<PageTemplateProjection> GetAllTemplatesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get template
        /// </summary>
        /// <remarks>
        /// Get email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        TemplateDto GetTemplate(Guid templateId, int operationIndex = 0);

        /// <summary>
        /// Get template
        /// </summary>
        /// <remarks>
        /// Get email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        ApiResponse<TemplateDto> GetTemplateWithHttpInfo(Guid templateId, int operationIndex = 0);
        /// <summary>
        /// Get template preview HTML
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string GetTemplatePreviewHtml(Guid templateId, int operationIndex = 0);

        /// <summary>
        /// Get template preview HTML
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> GetTemplatePreviewHtmlWithHttpInfo(Guid templateId, int operationIndex = 0);
        /// <summary>
        /// Get template preview Json
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplatePreview</returns>
        TemplatePreview GetTemplatePreviewJson(Guid templateId, int operationIndex = 0);

        /// <summary>
        /// Get template preview Json
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplatePreview</returns>
        ApiResponse<TemplatePreview> GetTemplatePreviewJsonWithHttpInfo(Guid templateId, int operationIndex = 0);
        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;TemplateProjection&gt;</returns>
        List<TemplateProjection> GetTemplates(int operationIndex = 0);

        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;TemplateProjection&gt;</returns>
        ApiResponse<List<TemplateProjection>> GetTemplatesWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Update template
        /// </summary>
        /// <remarks>
        /// Update email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        TemplateDto UpdateTemplate(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0);

        /// <summary>
        /// Update template
        /// </summary>
        /// <remarks>
        /// Update email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        ApiResponse<TemplateDto> UpdateTemplateWithHttpInfo(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITemplateControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create a Template
        /// </summary>
        /// <remarks>
        /// Create an email template with variables for use with templated transactional emails.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        System.Threading.Tasks.Task<TemplateDto> CreateTemplateAsync(CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a Template
        /// </summary>
        /// <remarks>
        /// Create an email template with variables for use with templated transactional emails.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<TemplateDto>> CreateTemplateWithHttpInfoAsync(CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete email template
        /// </summary>
        /// <remarks>
        /// Delete template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteTemplateAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete email template
        /// </summary>
        /// <remarks>
        /// Delete template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteTemplateWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates in paginated format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTemplateProjection</returns>
        System.Threading.Tasks.Task<PageTemplateProjection> GetAllTemplatesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates in paginated format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTemplateProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageTemplateProjection>> GetAllTemplatesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get template
        /// </summary>
        /// <remarks>
        /// Get email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        System.Threading.Tasks.Task<TemplateDto> GetTemplateAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get template
        /// </summary>
        /// <remarks>
        /// Get email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<TemplateDto>> GetTemplateWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get template preview HTML
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> GetTemplatePreviewHtmlAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get template preview HTML
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> GetTemplatePreviewHtmlWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get template preview Json
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplatePreview</returns>
        System.Threading.Tasks.Task<TemplatePreview> GetTemplatePreviewJsonAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get template preview Json
        /// </summary>
        /// <remarks>
        /// Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplatePreview)</returns>
        System.Threading.Tasks.Task<ApiResponse<TemplatePreview>> GetTemplatePreviewJsonWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;TemplateProjection&gt;</returns>
        System.Threading.Tasks.Task<List<TemplateProjection>> GetTemplatesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List templates
        /// </summary>
        /// <remarks>
        /// Get all templates
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;TemplateProjection&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<TemplateProjection>>> GetTemplatesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update template
        /// </summary>
        /// <remarks>
        /// Update email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        System.Threading.Tasks.Task<TemplateDto> UpdateTemplateAsync(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update template
        /// </summary>
        /// <remarks>
        /// Update email template
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<TemplateDto>> UpdateTemplateWithHttpInfoAsync(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITemplateControllerApi : ITemplateControllerApiSync, ITemplateControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public TemplateControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public TemplateControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public TemplateControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public TemplateControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create a Template Create an email template with variables for use with templated transactional emails.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        public TemplateDto CreateTemplate(CreateTemplateOptions createTemplateOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = CreateTemplateWithHttpInfo(createTemplateOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a Template Create an email template with variables for use with templated transactional emails.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        public mailslurp.Client.ApiResponse<TemplateDto> CreateTemplateWithHttpInfo(CreateTemplateOptions createTemplateOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createTemplateOptions' is set
            if (createTemplateOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTemplateOptions' when calling TemplateControllerApi->CreateTemplate");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createTemplateOptions;

            localVarRequestOptions.Operation = "TemplateControllerApi.CreateTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<TemplateDto>("/templates", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a Template Create an email template with variables for use with templated transactional emails.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        public async System.Threading.Tasks.Task<TemplateDto> CreateTemplateAsync(CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = await CreateTemplateWithHttpInfoAsync(createTemplateOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a Template Create an email template with variables for use with templated transactional emails.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TemplateDto>> CreateTemplateWithHttpInfoAsync(CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createTemplateOptions' is set
            if (createTemplateOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTemplateOptions' when calling TemplateControllerApi->CreateTemplate");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createTemplateOptions;

            localVarRequestOptions.Operation = "TemplateControllerApi.CreateTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<TemplateDto>("/templates", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete email template Delete template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteTemplate(Guid templateId, int operationIndex = 0)
        {
            DeleteTemplateWithHttpInfo(templateId);
        }

        /// <summary>
        /// Delete email template Delete template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteTemplateWithHttpInfo(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.DeleteTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/templates/{templateId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete email template Delete template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteTemplateAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteTemplateWithHttpInfoAsync(templateId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete email template Delete template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteTemplateWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.DeleteTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/templates/{templateId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List templates Get all templates in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTemplateProjection</returns>
        public PageTemplateProjection GetAllTemplates(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageTemplateProjection> localVarResponse = GetAllTemplatesWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List templates Get all templates in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTemplateProjection</returns>
        public mailslurp.Client.ApiResponse<PageTemplateProjection> GetAllTemplatesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "TemplateControllerApi.GetAllTemplates";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageTemplateProjection>("/templates/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllTemplates", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List templates Get all templates in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTemplateProjection</returns>
        public async System.Threading.Tasks.Task<PageTemplateProjection> GetAllTemplatesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageTemplateProjection> localVarResponse = await GetAllTemplatesWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List templates Get all templates in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTemplateProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageTemplateProjection>> GetAllTemplatesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "TemplateControllerApi.GetAllTemplates";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageTemplateProjection>("/templates/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllTemplates", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template Get email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        public TemplateDto GetTemplate(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = GetTemplateWithHttpInfo(templateId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template Get email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        public mailslurp.Client.ApiResponse<TemplateDto> GetTemplateWithHttpInfo(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<TemplateDto>("/templates/{templateId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template Get email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        public async System.Threading.Tasks.Task<TemplateDto> GetTemplateAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = await GetTemplateWithHttpInfoAsync(templateId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template Get email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TemplateDto>> GetTemplateWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<TemplateDto>("/templates/{templateId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template preview HTML Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string GetTemplatePreviewHtml(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = GetTemplatePreviewHtmlWithHttpInfo(templateId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template preview HTML Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> GetTemplatePreviewHtmlWithHttpInfo(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html;charset=utf-8",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplatePreviewHtml";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<string>("/templates/{templateId}/preview/html", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplatePreviewHtml", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template preview HTML Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> GetTemplatePreviewHtmlAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await GetTemplatePreviewHtmlWithHttpInfoAsync(templateId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template preview HTML Get email template preview with passed template variables in HTML format for browsers. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> GetTemplatePreviewHtmlWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html;charset=utf-8",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplatePreviewHtml";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<string>("/templates/{templateId}/preview/html", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplatePreviewHtml", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template preview Json Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplatePreview</returns>
        public TemplatePreview GetTemplatePreviewJson(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TemplatePreview> localVarResponse = GetTemplatePreviewJsonWithHttpInfo(templateId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template preview Json Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplatePreview</returns>
        public mailslurp.Client.ApiResponse<TemplatePreview> GetTemplatePreviewJsonWithHttpInfo(Guid templateId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplatePreviewJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<TemplatePreview>("/templates/{templateId}/preview/json", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplatePreviewJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get template preview Json Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplatePreview</returns>
        public async System.Threading.Tasks.Task<TemplatePreview> GetTemplatePreviewJsonAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TemplatePreview> localVarResponse = await GetTemplatePreviewJsonWithHttpInfoAsync(templateId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get template preview Json Get email template preview with passed template variables in JSON format. Pass template variables as query params.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplatePreview)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TemplatePreview>> GetTemplatePreviewJsonWithHttpInfoAsync(Guid templateId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter

            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplatePreviewJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<TemplatePreview>("/templates/{templateId}/preview/json", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplatePreviewJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List templates Get all templates
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;TemplateProjection&gt;</returns>
        public List<TemplateProjection> GetTemplates(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<TemplateProjection>> localVarResponse = GetTemplatesWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// List templates Get all templates
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;TemplateProjection&gt;</returns>
        public mailslurp.Client.ApiResponse<List<TemplateProjection>> GetTemplatesWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplates";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<TemplateProjection>>("/templates", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplates", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List templates Get all templates
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;TemplateProjection&gt;</returns>
        public async System.Threading.Tasks.Task<List<TemplateProjection>> GetTemplatesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<TemplateProjection>> localVarResponse = await GetTemplatesWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List templates Get all templates
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;TemplateProjection&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<TemplateProjection>>> GetTemplatesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "TemplateControllerApi.GetTemplates";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<TemplateProjection>>("/templates", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetTemplates", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update template Update email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TemplateDto</returns>
        public TemplateDto UpdateTemplate(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = UpdateTemplateWithHttpInfo(templateId, createTemplateOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update template Update email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TemplateDto</returns>
        public mailslurp.Client.ApiResponse<TemplateDto> UpdateTemplateWithHttpInfo(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createTemplateOptions' is set
            if (createTemplateOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTemplateOptions' when calling TemplateControllerApi->UpdateTemplate");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter
            localVarRequestOptions.Data = createTemplateOptions;

            localVarRequestOptions.Operation = "TemplateControllerApi.UpdateTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<TemplateDto>("/templates/{templateId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update template Update email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TemplateDto</returns>
        public async System.Threading.Tasks.Task<TemplateDto> UpdateTemplateAsync(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TemplateDto> localVarResponse = await UpdateTemplateWithHttpInfoAsync(templateId, createTemplateOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update template Update email template
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="templateId">Template ID</param>
        /// <param name="createTemplateOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TemplateDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TemplateDto>> UpdateTemplateWithHttpInfoAsync(Guid templateId, CreateTemplateOptions createTemplateOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createTemplateOptions' is set
            if (createTemplateOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createTemplateOptions' when calling TemplateControllerApi->UpdateTemplate");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("templateId", mailslurp.Client.ClientUtils.ParameterToString(templateId)); // path parameter
            localVarRequestOptions.Data = createTemplateOptions;

            localVarRequestOptions.Operation = "TemplateControllerApi.UpdateTemplate";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<TemplateDto>("/templates/{templateId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateTemplate", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/SmsControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISmsControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Delete SMS message.
        /// </summary>
        /// <remarks>
        /// Delete an SMS message
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteSmsMessage(Guid smsId, int operationIndex = 0);

        /// <summary>
        /// Delete SMS message.
        /// </summary>
        /// <remarks>
        /// Delete an SMS message
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0);
        /// <summary>
        /// Delete all SMS messages
        /// </summary>
        /// <remarks>
        /// Delete all SMS messages or all messages for a given phone number
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteSmsMessages(Guid? phoneNumberId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Delete all SMS messages
        /// </summary>
        /// <remarks>
        /// Delete all SMS messages or all messages for a given phone number
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteSmsMessagesWithHttpInfo(Guid? phoneNumberId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get reply for an SMS message
        /// </summary>
        /// <remarks>
        /// Get reply for an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ReplyForSms</returns>
        ReplyForSms GetReplyForSmsMessage(Guid smsId, int operationIndex = 0);

        /// <summary>
        /// Get reply for an SMS message
        /// </summary>
        /// <remarks>
        /// Get reply for an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ReplyForSms</returns>
        ApiResponse<ReplyForSms> GetReplyForSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0);
        /// <summary>
        /// Get SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        CountDto GetSmsCount(int operationIndex = 0);

        /// <summary>
        /// Get SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        ApiResponse<CountDto> GetSmsCountWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a SMS summary object with content.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmsDto</returns>
        SmsDto GetSmsMessage(Guid smsId, int operationIndex = 0);

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a SMS summary object with content.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmsDto</returns>
        ApiResponse<SmsDto> GetSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0);
        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. .
        /// </summary>
        /// <remarks>
        /// By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSmsProjection</returns>
        PageSmsProjection GetSmsMessagesPaginated(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. .
        /// </summary>
        /// <remarks>
        /// By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSmsProjection</returns>
        ApiResponse<PageSmsProjection> GetSmsMessagesPaginatedWithHttpInfo(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get unread SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnreadCount</returns>
        UnreadCount GetUnreadSmsCount(int operationIndex = 0);

        /// <summary>
        /// Get unread SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnreadCount</returns>
        ApiResponse<UnreadCount> GetUnreadSmsCountWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number.
        /// </summary>
        /// <remarks>
        /// Reply to an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentSmsDto</returns>
        SentSmsDto ReplyToSmsMessage(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0);

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number.
        /// </summary>
        /// <remarks>
        /// Reply to an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentSmsDto</returns>
        ApiResponse<SentSmsDto> ReplyToSmsMessageWithHttpInfo(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISmsControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Delete SMS message.
        /// </summary>
        /// <remarks>
        /// Delete an SMS message
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete SMS message.
        /// </summary>
        /// <remarks>
        /// Delete an SMS message
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all SMS messages
        /// </summary>
        /// <remarks>
        /// Delete all SMS messages or all messages for a given phone number
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteSmsMessagesAsync(Guid? phoneNumberId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all SMS messages
        /// </summary>
        /// <remarks>
        /// Delete all SMS messages or all messages for a given phone number
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteSmsMessagesWithHttpInfoAsync(Guid? phoneNumberId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get reply for an SMS message
        /// </summary>
        /// <remarks>
        /// Get reply for an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ReplyForSms</returns>
        System.Threading.Tasks.Task<ReplyForSms> GetReplyForSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get reply for an SMS message
        /// </summary>
        /// <remarks>
        /// Get reply for an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ReplyForSms)</returns>
        System.Threading.Tasks.Task<ApiResponse<ReplyForSms>> GetReplyForSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        System.Threading.Tasks.Task<CountDto> GetSmsCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<CountDto>> GetSmsCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a SMS summary object with content.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmsDto</returns>
        System.Threading.Tasks.Task<SmsDto> GetSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a SMS summary object with content.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SmsDto>> GetSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. .
        /// </summary>
        /// <remarks>
        /// By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSmsProjection</returns>
        System.Threading.Tasks.Task<PageSmsProjection> GetSmsMessagesPaginatedAsync(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. .
        /// </summary>
        /// <remarks>
        /// By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSmsProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageSmsProjection>> GetSmsMessagesPaginatedWithHttpInfoAsync(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get unread SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnreadCount</returns>
        System.Threading.Tasks.Task<UnreadCount> GetUnreadSmsCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get unread SMS count
        /// </summary>
        /// <remarks>
        /// Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnreadCount)</returns>
        System.Threading.Tasks.Task<ApiResponse<UnreadCount>> GetUnreadSmsCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number.
        /// </summary>
        /// <remarks>
        /// Reply to an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentSmsDto</returns>
        System.Threading.Tasks.Task<SentSmsDto> ReplyToSmsMessageAsync(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number.
        /// </summary>
        /// <remarks>
        /// Reply to an SMS message.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentSmsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentSmsDto>> ReplyToSmsMessageWithHttpInfoAsync(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISmsControllerApi : ISmsControllerApiSync, ISmsControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="SmsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public SmsControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SmsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public SmsControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SmsControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public SmsControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SmsControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public SmsControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Delete SMS message. Delete an SMS message
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteSmsMessage(Guid smsId, int operationIndex = 0)
        {
            DeleteSmsMessageWithHttpInfo(smsId);
        }

        /// <summary>
        /// Delete SMS message. Delete an SMS message
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.DeleteSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/sms/{smsId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete SMS message. Delete an SMS message
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteSmsMessageWithHttpInfoAsync(smsId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete SMS message. Delete an SMS message
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.DeleteSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/sms/{smsId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all SMS messages Delete all SMS messages or all messages for a given phone number
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteSmsMessages(Guid? phoneNumberId = default(Guid?), int operationIndex = 0)
        {
            DeleteSmsMessagesWithHttpInfo(phoneNumberId);
        }

        /// <summary>
        /// Delete all SMS messages Delete all SMS messages or all messages for a given phone number
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteSmsMessagesWithHttpInfo(Guid? phoneNumberId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneNumberId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneNumberId", phoneNumberId));
            }

            localVarRequestOptions.Operation = "SmsControllerApi.DeleteSmsMessages";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/sms", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSmsMessages", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all SMS messages Delete all SMS messages or all messages for a given phone number
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteSmsMessagesAsync(Guid? phoneNumberId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteSmsMessagesWithHttpInfoAsync(phoneNumberId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all SMS messages Delete all SMS messages or all messages for a given phone number
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteSmsMessagesWithHttpInfoAsync(Guid? phoneNumberId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneNumberId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneNumberId", phoneNumberId));
            }

            localVarRequestOptions.Operation = "SmsControllerApi.DeleteSmsMessages";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/sms", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSmsMessages", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get reply for an SMS message Get reply for an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ReplyForSms</returns>
        public ReplyForSms GetReplyForSmsMessage(Guid smsId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ReplyForSms> localVarResponse = GetReplyForSmsMessageWithHttpInfo(smsId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get reply for an SMS message Get reply for an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ReplyForSms</returns>
        public mailslurp.Client.ApiResponse<ReplyForSms> GetReplyForSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.GetReplyForSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ReplyForSms>("/sms/{smsId}/reply", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetReplyForSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get reply for an SMS message Get reply for an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ReplyForSms</returns>
        public async System.Threading.Tasks.Task<ReplyForSms> GetReplyForSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ReplyForSms> localVarResponse = await GetReplyForSmsMessageWithHttpInfoAsync(smsId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get reply for an SMS message Get reply for an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ReplyForSms)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ReplyForSms>> GetReplyForSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.GetReplyForSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ReplyForSms>("/sms/{smsId}/reply", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetReplyForSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get SMS count Get number of SMS
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        public CountDto GetSmsCount(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = GetSmsCountWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get SMS count Get number of SMS
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        public mailslurp.Client.ApiResponse<CountDto> GetSmsCountWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<CountDto>("/sms/count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get SMS count Get number of SMS
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        public async System.Threading.Tasks.Task<CountDto> GetSmsCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = await GetSmsCountWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get SMS count Get number of SMS
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CountDto>> GetSmsCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<CountDto>("/sms/count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController. Returns a SMS summary object with content.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmsDto</returns>
        public SmsDto GetSmsMessage(Guid smsId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SmsDto> localVarResponse = GetSmsMessageWithHttpInfo(smsId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController. Returns a SMS summary object with content.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmsDto</returns>
        public mailslurp.Client.ApiResponse<SmsDto> GetSmsMessageWithHttpInfo(Guid smsId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<SmsDto>("/sms/{smsId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController. Returns a SMS summary object with content.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmsDto</returns>
        public async System.Threading.Tasks.Task<SmsDto> GetSmsMessageAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SmsDto> localVarResponse = await GetSmsMessageWithHttpInfoAsync(smsId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get SMS content including body. Expects SMS to exist by ID. For SMS that may not have arrived yet use the WaitForController. Returns a SMS summary object with content.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SmsDto>> GetSmsMessageWithHttpInfoAsync(Guid smsId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter

            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<SmsDto>("/sms/{smsId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. . By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSmsProjection</returns>
        public PageSmsProjection GetSmsMessagesPaginated(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageSmsProjection> localVarResponse = GetSmsMessagesPaginatedWithHttpInfo(phoneNumber, page, size, sort, unreadOnly, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. . By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSmsProjection</returns>
        public mailslurp.Client.ApiResponse<PageSmsProjection> GetSmsMessagesPaginatedWithHttpInfo(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneNumber != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneNumber", phoneNumber));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsMessagesPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageSmsProjection>("/sms", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsMessagesPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. . By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSmsProjection</returns>
        public async System.Threading.Tasks.Task<PageSmsProjection> GetSmsMessagesPaginatedAsync(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageSmsProjection> localVarResponse = await GetSmsMessagesPaginatedWithHttpInfoAsync(phoneNumber, page, size, sort, unreadOnly, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all SMS messages in all phone numbers in paginated form. . By default returns all SMS messages across all phone numbers sorted by ascending created at date. Responses are paginated. You can restrict results to a list of phone number IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumber">Optional receiving phone number to filter SMS messages for (optional)</param>
        /// <param name="page">Optional page index in SMS list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in SMS list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread SMS only. All SMS are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="since">Optional filter SMSs received after given date time (optional)</param>
        /// <param name="before">Optional filter SMSs received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSmsProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageSmsProjection>> GetSmsMessagesPaginatedWithHttpInfoAsync(Guid? phoneNumber = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneNumber != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneNumber", phoneNumber));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SmsControllerApi.GetSmsMessagesPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageSmsProjection>("/sms", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmsMessagesPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get unread SMS count Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnreadCount</returns>
        public UnreadCount GetUnreadSmsCount(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<UnreadCount> localVarResponse = GetUnreadSmsCountWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get unread SMS count Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnreadCount</returns>
        public mailslurp.Client.ApiResponse<UnreadCount> GetUnreadSmsCountWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SmsControllerApi.GetUnreadSmsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<UnreadCount>("/sms/unreadCount", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUnreadSmsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get unread SMS count Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnreadCount</returns>
        public async System.Threading.Tasks.Task<UnreadCount> GetUnreadSmsCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<UnreadCount> localVarResponse = await GetUnreadSmsCountWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get unread SMS count Get number of SMS unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnreadCount)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<UnreadCount>> GetUnreadSmsCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SmsControllerApi.GetUnreadSmsCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<UnreadCount>("/sms/unreadCount", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUnreadSmsCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number. Reply to an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentSmsDto</returns>
        public SentSmsDto ReplyToSmsMessage(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentSmsDto> localVarResponse = ReplyToSmsMessageWithHttpInfo(smsId, smsReplyOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number. Reply to an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentSmsDto</returns>
        public mailslurp.Client.ApiResponse<SentSmsDto> ReplyToSmsMessageWithHttpInfo(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0)
        {
            // verify the required parameter 'smsReplyOptions' is set
            if (smsReplyOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'smsReplyOptions' when calling SmsControllerApi->ReplyToSmsMessage");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter
            localVarRequestOptions.Data = smsReplyOptions;

            localVarRequestOptions.Operation = "SmsControllerApi.ReplyToSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SentSmsDto>("/sms/{smsId}/reply", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number. Reply to an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentSmsDto</returns>
        public async System.Threading.Tasks.Task<SentSmsDto> ReplyToSmsMessageAsync(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentSmsDto> localVarResponse = await ReplyToSmsMessageWithHttpInfoAsync(smsId, smsReplyOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send a reply to a received SMS message. Replies are sent from the receiving number. Reply to an SMS message.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="smsId"></param>
        /// <param name="smsReplyOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentSmsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentSmsDto>> ReplyToSmsMessageWithHttpInfoAsync(Guid smsId, SmsReplyOptions smsReplyOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'smsReplyOptions' is set
            if (smsReplyOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'smsReplyOptions' when calling SmsControllerApi->ReplyToSmsMessage");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("smsId", mailslurp.Client.ClientUtils.ParameterToString(smsId)); // path parameter
            localVarRequestOptions.Data = smsReplyOptions;

            localVarRequestOptions.Operation = "SmsControllerApi.ReplyToSmsMessage";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SentSmsDto>("/sms/{smsId}/reply", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToSmsMessage", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/SentEmailsControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISentEmailsControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Delete all sent email receipts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllSentEmails(int operationIndex = 0);

        /// <summary>
        /// Delete all sent email receipts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllSentEmailsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete sent email receipt
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteSentEmail(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteSentEmailWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        PageTrackingPixelProjection GetAllSentTrackingPixels(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        ApiResponse<PageTrackingPixelProjection> GetAllSentTrackingPixelsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void GetRawSentEmailContents(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> GetRawSentEmailContentsWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>RawEmailJson</returns>
        RawEmailJson GetRawSentEmailJson(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of RawEmailJson</returns>
        ApiResponse<RawEmailJson> GetRawSentEmailJsonWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get a sent email delivery status
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DeliveryStatusDto</returns>
        DeliveryStatusDto GetSentDeliveryStatus(Guid deliveryId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get a sent email delivery status
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DeliveryStatusDto</returns>
        ApiResponse<DeliveryStatusDto> GetSentDeliveryStatusWithHttpInfo(Guid deliveryId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        PageDeliveryStatus GetSentDeliveryStatuses(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        ApiResponse<PageDeliveryStatus> GetSentDeliveryStatusesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        PageDeliveryStatus GetSentDeliveryStatusesBySentId(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        ApiResponse<PageDeliveryStatus> GetSentDeliveryStatusesBySentIdWithHttpInfo(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get sent email receipt
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto GetSentEmail(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> GetSentEmailWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get sent email HTML content
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string GetSentEmailHTMLContent(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get sent email HTML content
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> GetSentEmailHTMLContentWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get sent email URL for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreviewUrls</returns>
        EmailPreviewUrls GetSentEmailPreviewURLs(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreviewUrls</returns>
        ApiResponse<EmailPreviewUrls> GetSentEmailPreviewURLsWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all tracking pixels for a sent email in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        PageTrackingPixelProjection GetSentEmailTrackingPixels(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all tracking pixels for a sent email in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        ApiResponse<PageTrackingPixelProjection> GetSentEmailTrackingPixelsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get all sent emails in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        PageSentEmailProjection GetSentEmails(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all sent emails in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        ApiResponse<PageSentEmailProjection> GetSentEmailsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get results of email sent with queues in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailWithQueueProjection</returns>
        PageSentEmailWithQueueProjection GetSentEmailsWithQueueResults(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get results of email sent with queues in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailWithQueueProjection</returns>
        ApiResponse<PageSentEmailWithQueueProjection> GetSentEmailsWithQueueResultsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent organization emails in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        PageSentEmailProjection GetSentOrganizationEmails(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent organization emails in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        ApiResponse<PageSentEmailProjection> GetSentOrganizationEmailsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Wait for delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DeliveryStatusDto</returns>
        DeliveryStatusDto WaitForDeliveryStatuses(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Wait for delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DeliveryStatusDto</returns>
        ApiResponse<DeliveryStatusDto> WaitForDeliveryStatusesWithHttpInfo(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISentEmailsControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Delete all sent email receipts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllSentEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all sent email receipts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllSentEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteSentEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteSentEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        System.Threading.Tasks.Task<PageTrackingPixelProjection> GetAllSentTrackingPixelsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email tracking pixels in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageTrackingPixelProjection>> GetAllSentTrackingPixelsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task GetRawSentEmailContentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> GetRawSentEmailContentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of RawEmailJson</returns>
        System.Threading.Tasks.Task<RawEmailJson> GetRawSentEmailJsonAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (RawEmailJson)</returns>
        System.Threading.Tasks.Task<ApiResponse<RawEmailJson>> GetRawSentEmailJsonWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get a sent email delivery status
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DeliveryStatusDto</returns>
        System.Threading.Tasks.Task<DeliveryStatusDto> GetSentDeliveryStatusAsync(Guid deliveryId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get a sent email delivery status
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DeliveryStatusDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DeliveryStatusDto>> GetSentDeliveryStatusWithHttpInfoAsync(Guid deliveryId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        System.Threading.Tasks.Task<PageDeliveryStatus> GetSentDeliveryStatusesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageDeliveryStatus>> GetSentDeliveryStatusesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        System.Threading.Tasks.Task<PageDeliveryStatus> GetSentDeliveryStatusesBySentIdAsync(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent email delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageDeliveryStatus>> GetSentDeliveryStatusesBySentIdWithHttpInfoAsync(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> GetSentEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get sent email receipt
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> GetSentEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get sent email HTML content
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> GetSentEmailHTMLContentAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get sent email HTML content
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> GetSentEmailHTMLContentWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get sent email URL for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreviewUrls</returns>
        System.Threading.Tasks.Task<EmailPreviewUrls> GetSentEmailPreviewURLsAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreviewUrls)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailPreviewUrls>> GetSentEmailPreviewURLsWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all tracking pixels for a sent email in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        System.Threading.Tasks.Task<PageTrackingPixelProjection> GetSentEmailTrackingPixelsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all tracking pixels for a sent email in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageTrackingPixelProjection>> GetSentEmailTrackingPixelsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all sent emails in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        System.Threading.Tasks.Task<PageSentEmailProjection> GetSentEmailsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all sent emails in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageSentEmailProjection>> GetSentEmailsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get results of email sent with queues in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailWithQueueProjection</returns>
        System.Threading.Tasks.Task<PageSentEmailWithQueueProjection> GetSentEmailsWithQueueResultsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get results of email sent with queues in paginated form
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailWithQueueProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageSentEmailWithQueueProjection>> GetSentEmailsWithQueueResultsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent organization emails in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        System.Threading.Tasks.Task<PageSentEmailProjection> GetSentOrganizationEmailsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all sent organization emails in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageSentEmailProjection>> GetSentOrganizationEmailsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Wait for delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DeliveryStatusDto</returns>
        System.Threading.Tasks.Task<DeliveryStatusDto> WaitForDeliveryStatusesAsync(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Wait for delivery statuses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DeliveryStatusDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DeliveryStatusDto>> WaitForDeliveryStatusesWithHttpInfoAsync(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ISentEmailsControllerApi : ISentEmailsControllerApiSync, ISentEmailsControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public SentEmailsControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public SentEmailsControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailsControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public SentEmailsControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SentEmailsControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public SentEmailsControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Delete all sent email receipts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllSentEmails(int operationIndex = 0)
        {
            DeleteAllSentEmailsWithHttpInfo();
        }

        /// <summary>
        /// Delete all sent email receipts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllSentEmailsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SentEmailsControllerApi.DeleteAllSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/sent", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all sent email receipts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllSentEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllSentEmailsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all sent email receipts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllSentEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "SentEmailsControllerApi.DeleteAllSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/sent", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteSentEmail(Guid id, int operationIndex = 0)
        {
            DeleteSentEmailWithHttpInfo(id);
        }

        /// <summary>
        /// Delete sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteSentEmailWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.DeleteSentEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/sent/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSentEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteSentEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteSentEmailWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteSentEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.DeleteSentEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/sent/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteSentEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        public PageTrackingPixelProjection GetAllSentTrackingPixels(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = GetAllSentTrackingPixelsWithHttpInfo(page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        public mailslurp.Client.ApiResponse<PageTrackingPixelProjection> GetAllSentTrackingPixelsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetAllSentTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageTrackingPixelProjection>("/sent/tracking-pixels", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllSentTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        public async System.Threading.Tasks.Task<PageTrackingPixelProjection> GetAllSentTrackingPixelsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = await GetAllSentTrackingPixelsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email tracking pixels in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageTrackingPixelProjection>> GetAllSentTrackingPixelsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetAllSentTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageTrackingPixelProjection>("/sent/tracking-pixels", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllSentTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void GetRawSentEmailContents(Guid emailId, int operationIndex = 0)
        {
            GetRawSentEmailContentsWithHttpInfo(emailId);
        }

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> GetRawSentEmailContentsWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetRawSentEmailContents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Object>("/sent/{emailId}/raw", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawSentEmailContents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task GetRawSentEmailContentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await GetRawSentEmailContentsWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Get raw sent email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed sent email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawSentEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> GetRawSentEmailContentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetRawSentEmailContents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Object>("/sent/{emailId}/raw", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawSentEmailContents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>RawEmailJson</returns>
        public RawEmailJson GetRawSentEmailJson(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<RawEmailJson> localVarResponse = GetRawSentEmailJsonWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of RawEmailJson</returns>
        public mailslurp.Client.ApiResponse<RawEmailJson> GetRawSentEmailJsonWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetRawSentEmailJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<RawEmailJson>("/sent/{emailId}/raw/json", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawSentEmailJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of RawEmailJson</returns>
        public async System.Threading.Tasks.Task<RawEmailJson> GetRawSentEmailJsonAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<RawEmailJson> localVarResponse = await GetRawSentEmailJsonWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get raw sent email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed sent email wrapped in a JSON response object for easier handling when compared with the getRawSentEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (RawEmailJson)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<RawEmailJson>> GetRawSentEmailJsonWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetRawSentEmailJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<RawEmailJson>("/sent/{emailId}/raw/json", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawSentEmailJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get a sent email delivery status
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DeliveryStatusDto</returns>
        public DeliveryStatusDto GetSentDeliveryStatus(Guid deliveryId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DeliveryStatusDto> localVarResponse = GetSentDeliveryStatusWithHttpInfo(deliveryId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get a sent email delivery status
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DeliveryStatusDto</returns>
        public mailslurp.Client.ApiResponse<DeliveryStatusDto> GetSentDeliveryStatusWithHttpInfo(Guid deliveryId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("deliveryId", mailslurp.Client.ClientUtils.ParameterToString(deliveryId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DeliveryStatusDto>("/sent/delivery-status/{deliveryId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get a sent email delivery status
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DeliveryStatusDto</returns>
        public async System.Threading.Tasks.Task<DeliveryStatusDto> GetSentDeliveryStatusAsync(Guid deliveryId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DeliveryStatusDto> localVarResponse = await GetSentDeliveryStatusWithHttpInfoAsync(deliveryId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get a sent email delivery status
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deliveryId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DeliveryStatusDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DeliveryStatusDto>> GetSentDeliveryStatusWithHttpInfoAsync(Guid deliveryId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("deliveryId", mailslurp.Client.ClientUtils.ParameterToString(deliveryId)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DeliveryStatusDto>("/sent/delivery-status/{deliveryId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        public PageDeliveryStatus GetSentDeliveryStatuses(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = GetSentDeliveryStatusesWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        public mailslurp.Client.ApiResponse<PageDeliveryStatus> GetSentDeliveryStatusesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatuses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageDeliveryStatus>("/sent/delivery-status", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatuses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        public async System.Threading.Tasks.Task<PageDeliveryStatus> GetSentDeliveryStatusesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = await GetSentDeliveryStatusesWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageDeliveryStatus>> GetSentDeliveryStatusesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatuses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageDeliveryStatus>("/sent/delivery-status", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatuses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        public PageDeliveryStatus GetSentDeliveryStatusesBySentId(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = GetSentDeliveryStatusesBySentIdWithHttpInfo(sentId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        public mailslurp.Client.ApiResponse<PageDeliveryStatus> GetSentDeliveryStatusesBySentIdWithHttpInfo(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("sentId", mailslurp.Client.ClientUtils.ParameterToString(sentId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatusesBySentId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageDeliveryStatus>("/sent/{sentId}/delivery-status", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatusesBySentId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        public async System.Threading.Tasks.Task<PageDeliveryStatus> GetSentDeliveryStatusesBySentIdAsync(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = await GetSentDeliveryStatusesBySentIdWithHttpInfoAsync(sentId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent email delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">ID of the sent email that you want to get the delivery status of. Sent email object is returned when sending an email</param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageDeliveryStatus>> GetSentDeliveryStatusesBySentIdWithHttpInfoAsync(Guid sentId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("sentId", mailslurp.Client.ClientUtils.ParameterToString(sentId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentDeliveryStatusesBySentId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageDeliveryStatus>("/sent/{sentId}/delivery-status", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentDeliveryStatusesBySentId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto GetSentEmail(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = GetSentEmailWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> GetSentEmailWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<SentEmailDto>("/sent/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> GetSentEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await GetSentEmailWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email receipt 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> GetSentEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<SentEmailDto>("/sent/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email HTML content 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string GetSentEmailHTMLContent(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = GetSentEmailHTMLContentWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email HTML content 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> GetSentEmailHTMLContentWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailHTMLContent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<string>("/sent/{id}/html", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailHTMLContent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email HTML content 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> GetSentEmailHTMLContentAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await GetSentEmailHTMLContentWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email HTML content 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> GetSentEmailHTMLContentWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailHTMLContent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<string>("/sent/{id}/html", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailHTMLContent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreviewUrls</returns>
        public EmailPreviewUrls GetSentEmailPreviewURLs(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailPreviewUrls> localVarResponse = GetSentEmailPreviewURLsWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreviewUrls</returns>
        public mailslurp.Client.ApiResponse<EmailPreviewUrls> GetSentEmailPreviewURLsWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailPreviewURLs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailPreviewUrls>("/sent/{id}/urls", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailPreviewURLs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreviewUrls</returns>
        public async System.Threading.Tasks.Task<EmailPreviewUrls> GetSentEmailPreviewURLsAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailPreviewUrls> localVarResponse = await GetSentEmailPreviewURLsWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get sent email URL for viewing in browser or downloading Get a list of URLs for sent email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreviewUrls)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailPreviewUrls>> GetSentEmailPreviewURLsWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailPreviewURLs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailPreviewUrls>("/sent/{id}/urls", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailPreviewURLs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all tracking pixels for a sent email in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        public PageTrackingPixelProjection GetSentEmailTrackingPixels(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = GetSentEmailTrackingPixelsWithHttpInfo(id, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all tracking pixels for a sent email in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        public mailslurp.Client.ApiResponse<PageTrackingPixelProjection> GetSentEmailTrackingPixelsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageTrackingPixelProjection>("/sent/{id}/tracking-pixels", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all tracking pixels for a sent email in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        public async System.Threading.Tasks.Task<PageTrackingPixelProjection> GetSentEmailTrackingPixelsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = await GetSentEmailTrackingPixelsWithHttpInfoAsync(id, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all tracking pixels for a sent email in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in sent email tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageTrackingPixelProjection>> GetSentEmailTrackingPixelsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageTrackingPixelProjection>("/sent/{id}/tracking-pixels", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all sent emails in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        public PageSentEmailProjection GetSentEmails(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = GetSentEmailsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all sent emails in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageSentEmailProjection> GetSentEmailsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageSentEmailProjection>("/sent", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all sent emails in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageSentEmailProjection> GetSentEmailsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = await GetSentEmailsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all sent emails in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageSentEmailProjection>> GetSentEmailsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageSentEmailProjection>("/sent", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get results of email sent with queues in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailWithQueueProjection</returns>
        public PageSentEmailWithQueueProjection GetSentEmailsWithQueueResults(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageSentEmailWithQueueProjection> localVarResponse = GetSentEmailsWithQueueResultsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get results of email sent with queues in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailWithQueueProjection</returns>
        public mailslurp.Client.ApiResponse<PageSentEmailWithQueueProjection> GetSentEmailsWithQueueResultsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailsWithQueueResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageSentEmailWithQueueProjection>("/sent/queue-results", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailsWithQueueResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get results of email sent with queues in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailWithQueueProjection</returns>
        public async System.Threading.Tasks.Task<PageSentEmailWithQueueProjection> GetSentEmailsWithQueueResultsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageSentEmailWithQueueProjection> localVarResponse = await GetSentEmailsWithQueueResultsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get results of email sent with queues in paginated form 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailWithQueueProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageSentEmailWithQueueProjection>> GetSentEmailsWithQueueResultsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentEmailsWithQueueResults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageSentEmailWithQueueProjection>("/sent/queue-results", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentEmailsWithQueueResults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent organization emails in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        public PageSentEmailProjection GetSentOrganizationEmails(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = GetSentOrganizationEmailsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent organization emails in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageSentEmailProjection> GetSentOrganizationEmailsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentOrganizationEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageSentEmailProjection>("/sent/organization", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentOrganizationEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all sent organization emails in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageSentEmailProjection> GetSentOrganizationEmailsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = await GetSentOrganizationEmailsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all sent organization emails in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inboxId to filter sender of sent emails by (optional)</param>
        /// <param name="page">Optional page index in sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageSentEmailProjection>> GetSentOrganizationEmailsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.GetSentOrganizationEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageSentEmailProjection>("/sent/organization", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSentOrganizationEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Wait for delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DeliveryStatusDto</returns>
        public DeliveryStatusDto WaitForDeliveryStatuses(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DeliveryStatusDto> localVarResponse = WaitForDeliveryStatusesWithHttpInfo(sentId, inboxId, timeout, index, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Wait for delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DeliveryStatusDto</returns>
        public mailslurp.Client.ApiResponse<DeliveryStatusDto> WaitForDeliveryStatusesWithHttpInfo(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (sentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sentId", sentId));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (index != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.WaitForDeliveryStatuses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DeliveryStatusDto>("/sent/delivery-status/wait-for", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForDeliveryStatuses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Wait for delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DeliveryStatusDto</returns>
        public async System.Threading.Tasks.Task<DeliveryStatusDto> WaitForDeliveryStatusesAsync(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DeliveryStatusDto> localVarResponse = await WaitForDeliveryStatusesWithHttpInfoAsync(sentId, inboxId, timeout, index, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Wait for delivery statuses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sentId">Optional sent email ID filter (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="index">Zero based index of the delivery status to wait for. If 1 delivery status already and you want to wait for the 2nd pass index&#x3D;1 (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DeliveryStatusDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DeliveryStatusDto>> WaitForDeliveryStatusesWithHttpInfoAsync(Guid? sentId = default(Guid?), Guid? inboxId = default(Guid?), long? timeout = default(long?), int? index = default(int?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (sentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sentId", sentId));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            if (index != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "SentEmailsControllerApi.WaitForDeliveryStatuses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DeliveryStatusDto>("/sent/delivery-status/wait-for", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForDeliveryStatuses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/PhoneControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IPhoneControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmergencyAddress</returns>
        EmergencyAddress CreateEmergencyAddress(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmergencyAddress</returns>
        ApiResponse<EmergencyAddress> CreateEmergencyAddressWithHttpInfo(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmptyResponseDto</returns>
        EmptyResponseDto DeleteEmergencyAddress(Guid addressId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmptyResponseDto</returns>
        ApiResponse<EmptyResponseDto> DeleteEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeletePhoneNumber(Guid phoneNumberId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeletePhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmergencyAddress</returns>
        EmergencyAddress GetEmergencyAddress(Guid addressId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmergencyAddress</returns>
        ApiResponse<EmergencyAddress> GetEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmergencyAddressDto&gt;</returns>
        List<EmergencyAddressDto> GetEmergencyAddresses(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmergencyAddressDto&gt;</returns>
        ApiResponse<List<EmergencyAddressDto>> GetEmergencyAddressesWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PhoneNumberDto</returns>
        PhoneNumberDto GetPhoneNumber(Guid phoneNumberId, int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PhoneNumberDto</returns>
        ApiResponse<PhoneNumberDto> GetPhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PagePhoneNumberProjection</returns>
        PagePhoneNumberProjection GetPhoneNumbers(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PagePhoneNumberProjection</returns>
        ApiResponse<PagePhoneNumberProjection> GetPhoneNumbersWithHttpInfo(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;PhonePlanDto&gt;</returns>
        List<PhonePlanDto> GetPhonePlans(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;PhonePlanDto&gt;</returns>
        ApiResponse<List<PhonePlanDto>> GetPhonePlansWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void TestPhoneNumberSendSms(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> TestPhoneNumberSendSmsWithHttpInfo(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IPhoneControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmergencyAddress</returns>
        System.Threading.Tasks.Task<EmergencyAddress> CreateEmergencyAddressAsync(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmergencyAddress)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmergencyAddress>> CreateEmergencyAddressWithHttpInfoAsync(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmptyResponseDto</returns>
        System.Threading.Tasks.Task<EmptyResponseDto> DeleteEmergencyAddressAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmptyResponseDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmptyResponseDto>> DeleteEmergencyAddressWithHttpInfoAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeletePhoneNumberAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeletePhoneNumberWithHttpInfoAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmergencyAddress</returns>
        System.Threading.Tasks.Task<EmergencyAddress> GetEmergencyAddressAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmergencyAddress)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmergencyAddress>> GetEmergencyAddressWithHttpInfoAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmergencyAddressDto&gt;</returns>
        System.Threading.Tasks.Task<List<EmergencyAddressDto>> GetEmergencyAddressesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmergencyAddressDto&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<EmergencyAddressDto>>> GetEmergencyAddressesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PhoneNumberDto</returns>
        System.Threading.Tasks.Task<PhoneNumberDto> GetPhoneNumberAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PhoneNumberDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<PhoneNumberDto>> GetPhoneNumberWithHttpInfoAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PagePhoneNumberProjection</returns>
        System.Threading.Tasks.Task<PagePhoneNumberProjection> GetPhoneNumbersAsync(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PagePhoneNumberProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PagePhoneNumberProjection>> GetPhoneNumbersWithHttpInfoAsync(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;PhonePlanDto&gt;</returns>
        System.Threading.Tasks.Task<List<PhonePlanDto>> GetPhonePlansAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;PhonePlanDto&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<PhonePlanDto>>> GetPhonePlansWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task TestPhoneNumberSendSmsAsync(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> TestPhoneNumberSendSmsWithHttpInfoAsync(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IPhoneControllerApi : IPhoneControllerApiSync, IPhoneControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public PhoneControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public PhoneControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public PhoneControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="PhoneControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public PhoneControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmergencyAddress</returns>
        public EmergencyAddress CreateEmergencyAddress(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmergencyAddress> localVarResponse = CreateEmergencyAddressWithHttpInfo(createEmergencyAddressOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmergencyAddress</returns>
        public mailslurp.Client.ApiResponse<EmergencyAddress> CreateEmergencyAddressWithHttpInfo(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createEmergencyAddressOptions' is set
            if (createEmergencyAddressOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createEmergencyAddressOptions' when calling PhoneControllerApi->CreateEmergencyAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createEmergencyAddressOptions;

            localVarRequestOptions.Operation = "PhoneControllerApi.CreateEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmergencyAddress>("/phone/emergency-addresses", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmergencyAddress</returns>
        public async System.Threading.Tasks.Task<EmergencyAddress> CreateEmergencyAddressAsync(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmergencyAddress> localVarResponse = await CreateEmergencyAddressWithHttpInfoAsync(createEmergencyAddressOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createEmergencyAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmergencyAddress)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmergencyAddress>> CreateEmergencyAddressWithHttpInfoAsync(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createEmergencyAddressOptions' is set
            if (createEmergencyAddressOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createEmergencyAddressOptions' when calling PhoneControllerApi->CreateEmergencyAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createEmergencyAddressOptions;

            localVarRequestOptions.Operation = "PhoneControllerApi.CreateEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmergencyAddress>("/phone/emergency-addresses", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmptyResponseDto</returns>
        public EmptyResponseDto DeleteEmergencyAddress(Guid addressId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmptyResponseDto> localVarResponse = DeleteEmergencyAddressWithHttpInfo(addressId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmptyResponseDto</returns>
        public mailslurp.Client.ApiResponse<EmptyResponseDto> DeleteEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("addressId", mailslurp.Client.ClientUtils.ParameterToString(addressId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.DeleteEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<EmptyResponseDto>("/phone/emergency-addresses/{addressId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmptyResponseDto</returns>
        public async System.Threading.Tasks.Task<EmptyResponseDto> DeleteEmergencyAddressAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmptyResponseDto> localVarResponse = await DeleteEmergencyAddressWithHttpInfoAsync(addressId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmptyResponseDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmptyResponseDto>> DeleteEmergencyAddressWithHttpInfoAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("addressId", mailslurp.Client.ClientUtils.ParameterToString(addressId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.DeleteEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<EmptyResponseDto>("/phone/emergency-addresses/{addressId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeletePhoneNumber(Guid phoneNumberId, int operationIndex = 0)
        {
            DeletePhoneNumberWithHttpInfo(phoneNumberId);
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeletePhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.DeletePhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/phone/numbers/{phoneNumberId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeletePhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeletePhoneNumberAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeletePhoneNumberWithHttpInfoAsync(phoneNumberId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeletePhoneNumberWithHttpInfoAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.DeletePhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/phone/numbers/{phoneNumberId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeletePhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmergencyAddress</returns>
        public EmergencyAddress GetEmergencyAddress(Guid addressId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmergencyAddress> localVarResponse = GetEmergencyAddressWithHttpInfo(addressId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmergencyAddress</returns>
        public mailslurp.Client.ApiResponse<EmergencyAddress> GetEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("addressId", mailslurp.Client.ClientUtils.ParameterToString(addressId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.GetEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmergencyAddress>("/phone/emergency-addresses/{addressId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmergencyAddress</returns>
        public async System.Threading.Tasks.Task<EmergencyAddress> GetEmergencyAddressAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmergencyAddress> localVarResponse = await GetEmergencyAddressWithHttpInfoAsync(addressId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="addressId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmergencyAddress)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmergencyAddress>> GetEmergencyAddressWithHttpInfoAsync(Guid addressId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("addressId", mailslurp.Client.ClientUtils.ParameterToString(addressId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.GetEmergencyAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmergencyAddress>("/phone/emergency-addresses/{addressId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmergencyAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmergencyAddressDto&gt;</returns>
        public List<EmergencyAddressDto> GetEmergencyAddresses(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<EmergencyAddressDto>> localVarResponse = GetEmergencyAddressesWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmergencyAddressDto&gt;</returns>
        public mailslurp.Client.ApiResponse<List<EmergencyAddressDto>> GetEmergencyAddressesWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "PhoneControllerApi.GetEmergencyAddresses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<EmergencyAddressDto>>("/phone/emergency-addresses", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmergencyAddresses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmergencyAddressDto&gt;</returns>
        public async System.Threading.Tasks.Task<List<EmergencyAddressDto>> GetEmergencyAddressesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<EmergencyAddressDto>> localVarResponse = await GetEmergencyAddressesWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmergencyAddressDto&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<EmergencyAddressDto>>> GetEmergencyAddressesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "PhoneControllerApi.GetEmergencyAddresses";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<EmergencyAddressDto>>("/phone/emergency-addresses", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmergencyAddresses", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PhoneNumberDto</returns>
        public PhoneNumberDto GetPhoneNumber(Guid phoneNumberId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PhoneNumberDto> localVarResponse = GetPhoneNumberWithHttpInfo(phoneNumberId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PhoneNumberDto</returns>
        public mailslurp.Client.ApiResponse<PhoneNumberDto> GetPhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PhoneNumberDto>("/phone/numbers/{phoneNumberId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PhoneNumberDto</returns>
        public async System.Threading.Tasks.Task<PhoneNumberDto> GetPhoneNumberAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PhoneNumberDto> localVarResponse = await GetPhoneNumberWithHttpInfoAsync(phoneNumberId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PhoneNumberDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PhoneNumberDto>> GetPhoneNumberWithHttpInfoAsync(Guid phoneNumberId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter

            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhoneNumber";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PhoneNumberDto>("/phone/numbers/{phoneNumberId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumber", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PagePhoneNumberProjection</returns>
        public PagePhoneNumberProjection GetPhoneNumbers(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PagePhoneNumberProjection> localVarResponse = GetPhoneNumbersWithHttpInfo(phoneCountry, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PagePhoneNumberProjection</returns>
        public mailslurp.Client.ApiResponse<PagePhoneNumberProjection> GetPhoneNumbersWithHttpInfo(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneCountry != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneCountry", phoneCountry));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhoneNumbers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PagePhoneNumberProjection>("/phone/numbers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumbers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PagePhoneNumberProjection</returns>
        public async System.Threading.Tasks.Task<PagePhoneNumberProjection> GetPhoneNumbersAsync(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PagePhoneNumberProjection> localVarResponse = await GetPhoneNumbersWithHttpInfoAsync(phoneCountry, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneCountry">Optional phone country (optional)</param>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PagePhoneNumberProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PagePhoneNumberProjection>> GetPhoneNumbersWithHttpInfoAsync(string phoneCountry = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (phoneCountry != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "phoneCountry", phoneCountry));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhoneNumbers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PagePhoneNumberProjection>("/phone/numbers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhoneNumbers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;PhonePlanDto&gt;</returns>
        public List<PhonePlanDto> GetPhonePlans(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<PhonePlanDto>> localVarResponse = GetPhonePlansWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;PhonePlanDto&gt;</returns>
        public mailslurp.Client.ApiResponse<List<PhonePlanDto>> GetPhonePlansWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhonePlans";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<PhonePlanDto>>("/phone/plans", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhonePlans", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;PhonePlanDto&gt;</returns>
        public async System.Threading.Tasks.Task<List<PhonePlanDto>> GetPhonePlansAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<PhonePlanDto>> localVarResponse = await GetPhonePlansWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;PhonePlanDto&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<PhonePlanDto>>> GetPhonePlansWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "PhoneControllerApi.GetPhonePlans";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<PhonePlanDto>>("/phone/plans", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetPhonePlans", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void TestPhoneNumberSendSms(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0)
        {
            TestPhoneNumberSendSmsWithHttpInfo(phoneNumberId, testPhoneNumberOptions, xTestId);
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> TestPhoneNumberSendSmsWithHttpInfo(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0)
        {
            // verify the required parameter 'testPhoneNumberOptions' is set
            if (testPhoneNumberOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testPhoneNumberOptions' when calling PhoneControllerApi->TestPhoneNumberSendSms");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter
            if (xTestId != null)
            {
                localVarRequestOptions.HeaderParameters.Add("x-test-id", mailslurp.Client.ClientUtils.ParameterToString(xTestId)); // header parameter
            }
            localVarRequestOptions.Data = testPhoneNumberOptions;

            localVarRequestOptions.Operation = "PhoneControllerApi.TestPhoneNumberSendSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/phone/numbers/{phoneNumberId}/test", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestPhoneNumberSendSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task TestPhoneNumberSendSmsAsync(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await TestPhoneNumberSendSmsWithHttpInfoAsync(phoneNumberId, testPhoneNumberOptions, xTestId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        ///  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="phoneNumberId"></param>
        /// <param name="testPhoneNumberOptions"></param>
        /// <param name="xTestId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> TestPhoneNumberSendSmsWithHttpInfoAsync(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'testPhoneNumberOptions' is set
            if (testPhoneNumberOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testPhoneNumberOptions' when calling PhoneControllerApi->TestPhoneNumberSendSms");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("phoneNumberId", mailslurp.Client.ClientUtils.ParameterToString(phoneNumberId)); // path parameter
            if (xTestId != null)
            {
                localVarRequestOptions.HeaderParameters.Add("x-test-id", mailslurp.Client.ClientUtils.ParameterToString(xTestId)); // header parameter
            }
            localVarRequestOptions.Data = testPhoneNumberOptions;

            localVarRequestOptions.Operation = "PhoneControllerApi.TestPhoneNumberSendSms";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/phone/numbers/{phoneNumberId}/test", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestPhoneNumberSendSms", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/MissedEmailControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMissedEmailControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Get all MissedEmails in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageMissedEmailProjection</returns>
        PageMissedEmailProjection GetAllMissedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get all MissedEmails in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageMissedEmailProjection</returns>
        ApiResponse<PageMissedEmailProjection> GetAllMissedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get all unknown missed emails in paginated format
        /// </summary>
        /// <remarks>
        /// Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageUnknownMissedEmailProjection</returns>
        PageUnknownMissedEmailProjection GetAllUnknownMissedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get all unknown missed emails in paginated format
        /// </summary>
        /// <remarks>
        /// Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageUnknownMissedEmailProjection</returns>
        ApiResponse<PageUnknownMissedEmailProjection> GetAllUnknownMissedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get MissedEmail
        /// </summary>
        /// <remarks>
        /// List emails that were missed due to plan limits.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>MissedEmailDto</returns>
        MissedEmailDto GetMissedEmail(Guid missedEmailId, int operationIndex = 0);

        /// <summary>
        /// Get MissedEmail
        /// </summary>
        /// <remarks>
        /// List emails that were missed due to plan limits.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of MissedEmailDto</returns>
        ApiResponse<MissedEmailDto> GetMissedEmailWithHttpInfo(Guid missedEmailId, int operationIndex = 0);
        /// <summary>
        /// Restore missed emails
        /// </summary>
        /// <remarks>
        /// If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void RestoreMissedEmails(int operationIndex = 0);

        /// <summary>
        /// Restore missed emails
        /// </summary>
        /// <remarks>
        /// If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> RestoreMissedEmailsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Wait for Nth missed email
        /// </summary>
        /// <remarks>
        /// Wait for 0 based index missed email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>MissedEmailDto</returns>
        MissedEmailDto WaitForNthMissedEmail(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Wait for Nth missed email
        /// </summary>
        /// <remarks>
        /// Wait for 0 based index missed email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of MissedEmailDto</returns>
        ApiResponse<MissedEmailDto> WaitForNthMissedEmailWithHttpInfo(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMissedEmailControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Get all MissedEmails in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageMissedEmailProjection</returns>
        System.Threading.Tasks.Task<PageMissedEmailProjection> GetAllMissedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all MissedEmails in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageMissedEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageMissedEmailProjection>> GetAllMissedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all unknown missed emails in paginated format
        /// </summary>
        /// <remarks>
        /// Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageUnknownMissedEmailProjection</returns>
        System.Threading.Tasks.Task<PageUnknownMissedEmailProjection> GetAllUnknownMissedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all unknown missed emails in paginated format
        /// </summary>
        /// <remarks>
        /// Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageUnknownMissedEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageUnknownMissedEmailProjection>> GetAllUnknownMissedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get MissedEmail
        /// </summary>
        /// <remarks>
        /// List emails that were missed due to plan limits.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of MissedEmailDto</returns>
        System.Threading.Tasks.Task<MissedEmailDto> GetMissedEmailAsync(Guid missedEmailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get MissedEmail
        /// </summary>
        /// <remarks>
        /// List emails that were missed due to plan limits.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (MissedEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<MissedEmailDto>> GetMissedEmailWithHttpInfoAsync(Guid missedEmailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Restore missed emails
        /// </summary>
        /// <remarks>
        /// If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task RestoreMissedEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Restore missed emails
        /// </summary>
        /// <remarks>
        /// If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> RestoreMissedEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Wait for Nth missed email
        /// </summary>
        /// <remarks>
        /// Wait for 0 based index missed email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of MissedEmailDto</returns>
        System.Threading.Tasks.Task<MissedEmailDto> WaitForNthMissedEmailAsync(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Wait for Nth missed email
        /// </summary>
        /// <remarks>
        /// Wait for 0 based index missed email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (MissedEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<MissedEmailDto>> WaitForNthMissedEmailWithHttpInfoAsync(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMissedEmailControllerApi : IMissedEmailControllerApiSync, IMissedEmailControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public MissedEmailControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public MissedEmailControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public MissedEmailControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MissedEmailControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public MissedEmailControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Get all MissedEmails in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageMissedEmailProjection</returns>
        public PageMissedEmailProjection GetAllMissedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageMissedEmailProjection> localVarResponse = GetAllMissedEmailsWithHttpInfo(page, size, sort, searchFilter, since, before, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all MissedEmails in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageMissedEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageMissedEmailProjection> GetAllMissedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetAllMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageMissedEmailProjection>("/missed-emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all MissedEmails in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageMissedEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageMissedEmailProjection> GetAllMissedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageMissedEmailProjection> localVarResponse = await GetAllMissedEmailsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all MissedEmails in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageMissedEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageMissedEmailProjection>> GetAllMissedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetAllMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageMissedEmailProjection>("/missed-emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all unknown missed emails in paginated format Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageUnknownMissedEmailProjection</returns>
        public PageUnknownMissedEmailProjection GetAllUnknownMissedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageUnknownMissedEmailProjection> localVarResponse = GetAllUnknownMissedEmailsWithHttpInfo(page, size, sort, searchFilter, since, before, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all unknown missed emails in paginated format Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageUnknownMissedEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageUnknownMissedEmailProjection> GetAllUnknownMissedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetAllUnknownMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageUnknownMissedEmailProjection>("/missed-emails/unknown", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllUnknownMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all unknown missed emails in paginated format Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageUnknownMissedEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageUnknownMissedEmailProjection> GetAllUnknownMissedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageUnknownMissedEmailProjection> localVarResponse = await GetAllUnknownMissedEmailsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all unknown missed emails in paginated format Unknown missed emails are emails that were sent to MailSlurp but could not be assigned to an existing inbox.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageUnknownMissedEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageUnknownMissedEmailProjection>> GetAllUnknownMissedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetAllUnknownMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageUnknownMissedEmailProjection>("/missed-emails/unknown", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllUnknownMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get MissedEmail List emails that were missed due to plan limits.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>MissedEmailDto</returns>
        public MissedEmailDto GetMissedEmail(Guid missedEmailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<MissedEmailDto> localVarResponse = GetMissedEmailWithHttpInfo(missedEmailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get MissedEmail List emails that were missed due to plan limits.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of MissedEmailDto</returns>
        public mailslurp.Client.ApiResponse<MissedEmailDto> GetMissedEmailWithHttpInfo(Guid missedEmailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("missedEmailId", mailslurp.Client.ClientUtils.ParameterToString(missedEmailId)); // path parameter

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetMissedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<MissedEmailDto>("/missed-emails/{missedEmailId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetMissedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get MissedEmail List emails that were missed due to plan limits.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of MissedEmailDto</returns>
        public async System.Threading.Tasks.Task<MissedEmailDto> GetMissedEmailAsync(Guid missedEmailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<MissedEmailDto> localVarResponse = await GetMissedEmailWithHttpInfoAsync(missedEmailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get MissedEmail List emails that were missed due to plan limits.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="missedEmailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (MissedEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<MissedEmailDto>> GetMissedEmailWithHttpInfoAsync(Guid missedEmailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("missedEmailId", mailslurp.Client.ClientUtils.ParameterToString(missedEmailId)); // path parameter

            localVarRequestOptions.Operation = "MissedEmailControllerApi.GetMissedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<MissedEmailDto>("/missed-emails/{missedEmailId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetMissedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Restore missed emails If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void RestoreMissedEmails(int operationIndex = 0)
        {
            RestoreMissedEmailsWithHttpInfo();
        }

        /// <summary>
        /// Restore missed emails If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> RestoreMissedEmailsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "MissedEmailControllerApi.RestoreMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/missed-emails/restore", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RestoreMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Restore missed emails If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task RestoreMissedEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await RestoreMissedEmailsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Restore missed emails If emails were missed due to a plan limit they are saved as missed emails. If support team enables the canRestore flag these emails can be reload into your account using this method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> RestoreMissedEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "MissedEmailControllerApi.RestoreMissedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/missed-emails/restore", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RestoreMissedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for Nth missed email Wait for 0 based index missed email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>MissedEmailDto</returns>
        public MissedEmailDto WaitForNthMissedEmail(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<MissedEmailDto> localVarResponse = WaitForNthMissedEmailWithHttpInfo(index, inboxId, timeout, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for Nth missed email Wait for 0 based index missed email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of MissedEmailDto</returns>
        public mailslurp.Client.ApiResponse<MissedEmailDto> WaitForNthMissedEmailWithHttpInfo(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.WaitForNthMissedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<MissedEmailDto>("/missed-emails/waitForNthMissedEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForNthMissedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Wait for Nth missed email Wait for 0 based index missed email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of MissedEmailDto</returns>
        public async System.Threading.Tasks.Task<MissedEmailDto> WaitForNthMissedEmailAsync(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<MissedEmailDto> localVarResponse = await WaitForNthMissedEmailWithHttpInfoAsync(index, inboxId, timeout, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Wait for Nth missed email Wait for 0 based index missed email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="index">Zero based index of the email to wait for. If 1 missed email already and you want to wait for the 2nd email pass index&#x3D;1</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="timeout">Optional timeout milliseconds (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (MissedEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<MissedEmailDto>> WaitForNthMissedEmailWithHttpInfoAsync(int index, Guid? inboxId = default(Guid?), long? timeout = default(long?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (timeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeout", timeout));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "index", index));
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "MissedEmailControllerApi.WaitForNthMissedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<MissedEmailDto>("/missed-emails/waitForNthMissedEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("WaitForNthMissedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/MailServerControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMailServerControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Get DNS Mail Server records for a domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DescribeMailServerDomainResult</returns>
        DescribeMailServerDomainResult DescribeMailServerDomain(DescribeDomainOptions describeDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Get DNS Mail Server records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DescribeMailServerDomainResult</returns>
        ApiResponse<DescribeMailServerDomainResult> DescribeMailServerDomainWithHttpInfo(DescribeDomainOptions describeDomainOptions, int operationIndex = 0);
        /// <summary>
        /// Lookup DNS records for a domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DNSLookupResults</returns>
        DNSLookupResults GetDnsLookup(DNSLookupOptions dNSLookupOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup DNS records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DNSLookupResults</returns>
        ApiResponse<DNSLookupResults> GetDnsLookupWithHttpInfo(DNSLookupOptions dNSLookupOptions, int operationIndex = 0);
        /// <summary>
        /// Lookup DNS records for multiple domains
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DNSLookupResults</returns>
        DNSLookupResults GetDnsLookups(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0);

        /// <summary>
        /// Lookup DNS records for multiple domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DNSLookupResults</returns>
        ApiResponse<DNSLookupResults> GetDnsLookupsWithHttpInfo(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0);
        /// <summary>
        /// Get IP address for a domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>IPAddressResult</returns>
        IPAddressResult GetIpAddress(string name, int operationIndex = 0);

        /// <summary>
        /// Get IP address for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of IPAddressResult</returns>
        ApiResponse<IPAddressResult> GetIpAddressWithHttpInfo(string name, int operationIndex = 0);
        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailVerificationResult</returns>
        [Obsolete]
        EmailVerificationResult VerifyEmailAddress(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0);

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailVerificationResult</returns>
        [Obsolete]
        ApiResponse<EmailVerificationResult> VerifyEmailAddressWithHttpInfo(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMailServerControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Get DNS Mail Server records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DescribeMailServerDomainResult</returns>
        System.Threading.Tasks.Task<DescribeMailServerDomainResult> DescribeMailServerDomainAsync(DescribeDomainOptions describeDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get DNS Mail Server records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DescribeMailServerDomainResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<DescribeMailServerDomainResult>> DescribeMailServerDomainWithHttpInfoAsync(DescribeDomainOptions describeDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup DNS records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DNSLookupResults</returns>
        System.Threading.Tasks.Task<DNSLookupResults> GetDnsLookupAsync(DNSLookupOptions dNSLookupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup DNS records for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DNSLookupResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<DNSLookupResults>> GetDnsLookupWithHttpInfoAsync(DNSLookupOptions dNSLookupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Lookup DNS records for multiple domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DNSLookupResults</returns>
        System.Threading.Tasks.Task<DNSLookupResults> GetDnsLookupsAsync(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Lookup DNS records for multiple domains
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DNSLookupResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<DNSLookupResults>> GetDnsLookupsWithHttpInfoAsync(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get IP address for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of IPAddressResult</returns>
        System.Threading.Tasks.Task<IPAddressResult> GetIpAddressAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get IP address for a domain
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (IPAddressResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<IPAddressResult>> GetIpAddressWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailVerificationResult</returns>
        [Obsolete]
        System.Threading.Tasks.Task<EmailVerificationResult> VerifyEmailAddressAsync(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailVerificationResult)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<EmailVerificationResult>> VerifyEmailAddressWithHttpInfoAsync(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IMailServerControllerApi : IMailServerControllerApiSync, IMailServerControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="MailServerControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public MailServerControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MailServerControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public MailServerControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MailServerControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public MailServerControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="MailServerControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public MailServerControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Get DNS Mail Server records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DescribeMailServerDomainResult</returns>
        public DescribeMailServerDomainResult DescribeMailServerDomain(DescribeDomainOptions describeDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DescribeMailServerDomainResult> localVarResponse = DescribeMailServerDomainWithHttpInfo(describeDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get DNS Mail Server records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DescribeMailServerDomainResult</returns>
        public mailslurp.Client.ApiResponse<DescribeMailServerDomainResult> DescribeMailServerDomainWithHttpInfo(DescribeDomainOptions describeDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'describeDomainOptions' is set
            if (describeDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'describeDomainOptions' when calling MailServerControllerApi->DescribeMailServerDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = describeDomainOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.DescribeMailServerDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<DescribeMailServerDomainResult>("/mail-server/describe/domain", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DescribeMailServerDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get DNS Mail Server records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DescribeMailServerDomainResult</returns>
        public async System.Threading.Tasks.Task<DescribeMailServerDomainResult> DescribeMailServerDomainAsync(DescribeDomainOptions describeDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DescribeMailServerDomainResult> localVarResponse = await DescribeMailServerDomainWithHttpInfoAsync(describeDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get DNS Mail Server records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="describeDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DescribeMailServerDomainResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DescribeMailServerDomainResult>> DescribeMailServerDomainWithHttpInfoAsync(DescribeDomainOptions describeDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'describeDomainOptions' is set
            if (describeDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'describeDomainOptions' when calling MailServerControllerApi->DescribeMailServerDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = describeDomainOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.DescribeMailServerDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<DescribeMailServerDomainResult>("/mail-server/describe/domain", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DescribeMailServerDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup DNS records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DNSLookupResults</returns>
        public DNSLookupResults GetDnsLookup(DNSLookupOptions dNSLookupOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DNSLookupResults> localVarResponse = GetDnsLookupWithHttpInfo(dNSLookupOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup DNS records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DNSLookupResults</returns>
        public mailslurp.Client.ApiResponse<DNSLookupResults> GetDnsLookupWithHttpInfo(DNSLookupOptions dNSLookupOptions, int operationIndex = 0)
        {
            // verify the required parameter 'dNSLookupOptions' is set
            if (dNSLookupOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'dNSLookupOptions' when calling MailServerControllerApi->GetDnsLookup");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = dNSLookupOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.GetDnsLookup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<DNSLookupResults>("/mail-server/describe/dns-lookup", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDnsLookup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup DNS records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DNSLookupResults</returns>
        public async System.Threading.Tasks.Task<DNSLookupResults> GetDnsLookupAsync(DNSLookupOptions dNSLookupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DNSLookupResults> localVarResponse = await GetDnsLookupWithHttpInfoAsync(dNSLookupOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup DNS records for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DNSLookupResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DNSLookupResults>> GetDnsLookupWithHttpInfoAsync(DNSLookupOptions dNSLookupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'dNSLookupOptions' is set
            if (dNSLookupOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'dNSLookupOptions' when calling MailServerControllerApi->GetDnsLookup");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = dNSLookupOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.GetDnsLookup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<DNSLookupResults>("/mail-server/describe/dns-lookup", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDnsLookup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup DNS records for multiple domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DNSLookupResults</returns>
        public DNSLookupResults GetDnsLookups(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DNSLookupResults> localVarResponse = GetDnsLookupsWithHttpInfo(dNSLookupsOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup DNS records for multiple domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DNSLookupResults</returns>
        public mailslurp.Client.ApiResponse<DNSLookupResults> GetDnsLookupsWithHttpInfo(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0)
        {
            // verify the required parameter 'dNSLookupsOptions' is set
            if (dNSLookupsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'dNSLookupsOptions' when calling MailServerControllerApi->GetDnsLookups");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = dNSLookupsOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.GetDnsLookups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<DNSLookupResults>("/mail-server/describe/dns-lookups", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDnsLookups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Lookup DNS records for multiple domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DNSLookupResults</returns>
        public async System.Threading.Tasks.Task<DNSLookupResults> GetDnsLookupsAsync(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DNSLookupResults> localVarResponse = await GetDnsLookupsWithHttpInfoAsync(dNSLookupsOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Lookup DNS records for multiple domains 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="dNSLookupsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DNSLookupResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DNSLookupResults>> GetDnsLookupsWithHttpInfoAsync(DNSLookupsOptions dNSLookupsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'dNSLookupsOptions' is set
            if (dNSLookupsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'dNSLookupsOptions' when calling MailServerControllerApi->GetDnsLookups");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = dNSLookupsOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.GetDnsLookups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<DNSLookupResults>("/mail-server/describe/dns-lookups", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDnsLookups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get IP address for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>IPAddressResult</returns>
        public IPAddressResult GetIpAddress(string name, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<IPAddressResult> localVarResponse = GetIpAddressWithHttpInfo(name);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get IP address for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of IPAddressResult</returns>
        public mailslurp.Client.ApiResponse<IPAddressResult> GetIpAddressWithHttpInfo(string name, int operationIndex = 0)
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling MailServerControllerApi->GetIpAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "MailServerControllerApi.GetIpAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<IPAddressResult>("/mail-server/describe/ip-address", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetIpAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get IP address for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of IPAddressResult</returns>
        public async System.Threading.Tasks.Task<IPAddressResult> GetIpAddressAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<IPAddressResult> localVarResponse = await GetIpAddressWithHttpInfoAsync(name, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get IP address for a domain 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (IPAddressResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<IPAddressResult>> GetIpAddressWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling MailServerControllerApi->GetIpAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "MailServerControllerApi.GetIpAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<IPAddressResult>("/mail-server/describe/ip-address", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetIpAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailVerificationResult</returns>
        [Obsolete]
        public EmailVerificationResult VerifyEmailAddress(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailVerificationResult> localVarResponse = VerifyEmailAddressWithHttpInfo(verifyEmailAddressOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailVerificationResult</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<EmailVerificationResult> VerifyEmailAddressWithHttpInfo(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0)
        {
            // verify the required parameter 'verifyEmailAddressOptions' is set
            if (verifyEmailAddressOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'verifyEmailAddressOptions' when calling MailServerControllerApi->VerifyEmailAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = verifyEmailAddressOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.VerifyEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmailVerificationResult>("/mail-server/verify/email-address", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("VerifyEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailVerificationResult</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<EmailVerificationResult> VerifyEmailAddressAsync(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailVerificationResult> localVarResponse = await VerifyEmailAddressWithHttpInfoAsync(verifyEmailAddressOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Deprecated. Use the EmailVerificationController methods for more accurate and reliable functionality. Verify the existence of an email address at a given mail server. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="verifyEmailAddressOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailVerificationResult)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailVerificationResult>> VerifyEmailAddressWithHttpInfoAsync(VerifyEmailAddressOptions verifyEmailAddressOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'verifyEmailAddressOptions' is set
            if (verifyEmailAddressOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'verifyEmailAddressOptions' when calling MailServerControllerApi->VerifyEmailAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = verifyEmailAddressOptions;

            localVarRequestOptions.Operation = "MailServerControllerApi.VerifyEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmailVerificationResult>("/mail-server/verify/email-address", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("VerifyEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/InboxRulesetControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxRulesetControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        InboxRulesetDto CreateNewInboxRuleset(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        ApiResponse<InboxRulesetDto> CreateNewInboxRulesetWithHttpInfo(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Delete an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Delete inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxRuleset(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Delete inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxRulesetWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Delete inbox rulesets
        /// </summary>
        /// <remarks>
        /// Delete inbox rulesets. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxRulesets(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Delete inbox rulesets
        /// </summary>
        /// <remarks>
        /// Delete inbox rulesets. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxRulesetsWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        InboxRulesetDto GetInboxRuleset(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        ApiResponse<InboxRulesetDto> GetInboxRulesetWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxRulesetDto</returns>
        PageInboxRulesetDto GetInboxRulesets(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxRulesetDto</returns>
        ApiResponse<PageInboxRulesetDto> GetInboxRulesetsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Test an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test an inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        InboxRulesetTestResult TestInboxRuleset(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0);

        /// <summary>
        /// Test an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test an inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        ApiResponse<InboxRulesetTestResult> TestInboxRulesetWithHttpInfo(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0);
        /// <summary>
        /// Test receiving with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TestInboxRulesetReceivingResult</returns>
        TestInboxRulesetReceivingResult TestInboxRulesetReceiving(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0);

        /// <summary>
        /// Test receiving with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TestInboxRulesetReceivingResult</returns>
        ApiResponse<TestInboxRulesetReceivingResult> TestInboxRulesetReceivingWithHttpInfo(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0);
        /// <summary>
        /// Test sending with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TestInboxRulesetSendingResult</returns>
        TestInboxRulesetSendingResult TestInboxRulesetSending(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0);

        /// <summary>
        /// Test sending with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TestInboxRulesetSendingResult</returns>
        ApiResponse<TestInboxRulesetSendingResult> TestInboxRulesetSendingWithHttpInfo(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0);
        /// <summary>
        /// Test inbox rulesets for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox rulesets for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        InboxRulesetTestResult TestInboxRulesetsForInbox(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0);

        /// <summary>
        /// Test inbox rulesets for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox rulesets for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        ApiResponse<InboxRulesetTestResult> TestInboxRulesetsForInboxWithHttpInfo(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0);
        /// <summary>
        /// Test new inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test new inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        InboxRulesetTestResult TestNewInboxRuleset(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0);

        /// <summary>
        /// Test new inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test new inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        ApiResponse<InboxRulesetTestResult> TestNewInboxRulesetWithHttpInfo(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxRulesetControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        System.Threading.Tasks.Task<InboxRulesetDto> CreateNewInboxRulesetAsync(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetDto>> CreateNewInboxRulesetWithHttpInfoAsync(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Delete inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxRulesetAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Delete inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxRulesetWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inbox rulesets
        /// </summary>
        /// <remarks>
        /// Delete inbox rulesets. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxRulesetsAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inbox rulesets
        /// </summary>
        /// <remarks>
        /// Delete inbox rulesets. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxRulesetsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        System.Threading.Tasks.Task<InboxRulesetDto> GetInboxRulesetAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetDto>> GetInboxRulesetWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxRulesetDto</returns>
        System.Threading.Tasks.Task<PageInboxRulesetDto> GetInboxRulesetsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxRulesetDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxRulesetDto>> GetInboxRulesetsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test an inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        System.Threading.Tasks.Task<InboxRulesetTestResult> TestInboxRulesetAsync(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test an inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetTestResult>> TestInboxRulesetWithHttpInfoAsync(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test receiving with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TestInboxRulesetReceivingResult</returns>
        System.Threading.Tasks.Task<TestInboxRulesetReceivingResult> TestInboxRulesetReceivingAsync(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test receiving with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TestInboxRulesetReceivingResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<TestInboxRulesetReceivingResult>> TestInboxRulesetReceivingWithHttpInfoAsync(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test sending with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TestInboxRulesetSendingResult</returns>
        System.Threading.Tasks.Task<TestInboxRulesetSendingResult> TestInboxRulesetSendingAsync(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test sending with inbox rulesets
        /// </summary>
        /// <remarks>
        /// Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TestInboxRulesetSendingResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<TestInboxRulesetSendingResult>> TestInboxRulesetSendingWithHttpInfoAsync(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test inbox rulesets for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox rulesets for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        System.Threading.Tasks.Task<InboxRulesetTestResult> TestInboxRulesetsForInboxAsync(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test inbox rulesets for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox rulesets for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetTestResult>> TestInboxRulesetsForInboxWithHttpInfoAsync(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test new inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test new inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        System.Threading.Tasks.Task<InboxRulesetTestResult> TestNewInboxRulesetAsync(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test new inbox ruleset
        /// </summary>
        /// <remarks>
        /// Test new inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetTestResult>> TestNewInboxRulesetWithHttpInfoAsync(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxRulesetControllerApi : IInboxRulesetControllerApiSync, IInboxRulesetControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxRulesetControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxRulesetControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public InboxRulesetControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxRulesetControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public InboxRulesetControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        public InboxRulesetDto CreateNewInboxRuleset(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = CreateNewInboxRulesetWithHttpInfo(createInboxRulesetOptions, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetDto> CreateNewInboxRulesetWithHttpInfo(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'createInboxRulesetOptions' is set
            if (createInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxRulesetOptions' when calling InboxRulesetControllerApi->CreateNewInboxRuleset");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = createInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.CreateNewInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxRulesetDto>("/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        public async System.Threading.Tasks.Task<InboxRulesetDto> CreateNewInboxRulesetAsync(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = await CreateNewInboxRulesetWithHttpInfoAsync(createInboxRulesetOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="inboxId">Inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetDto>> CreateNewInboxRulesetWithHttpInfoAsync(CreateInboxRulesetOptions createInboxRulesetOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxRulesetOptions' is set
            if (createInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxRulesetOptions' when calling InboxRulesetControllerApi->CreateNewInboxRuleset");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = createInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.CreateNewInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxRulesetDto>("/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox ruleset Delete inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxRuleset(Guid id, int operationIndex = 0)
        {
            DeleteInboxRulesetWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox ruleset Delete inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxRulesetWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.DeleteInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/rulesets/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox ruleset Delete inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxRulesetAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxRulesetWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox ruleset Delete inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxRulesetWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.DeleteInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/rulesets/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox rulesets Delete inbox rulesets. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxRulesets(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            DeleteInboxRulesetsWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete inbox rulesets Delete inbox rulesets. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxRulesetsWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.DeleteInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox rulesets Delete inbox rulesets. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxRulesetsAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxRulesetsWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inbox rulesets Delete inbox rulesets. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach ruleset to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxRulesetsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.DeleteInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox ruleset Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        public InboxRulesetDto GetInboxRuleset(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = GetInboxRulesetWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox ruleset Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetDto> GetInboxRulesetWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.GetInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxRulesetDto>("/rulesets/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox ruleset Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        public async System.Threading.Tasks.Task<InboxRulesetDto> GetInboxRulesetAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = await GetInboxRulesetWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox ruleset Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetDto>> GetInboxRulesetWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.GetInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxRulesetDto>("/rulesets/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxRulesetDto</returns>
        public PageInboxRulesetDto GetInboxRulesets(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxRulesetDto> localVarResponse = GetInboxRulesetsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxRulesetDto</returns>
        public mailslurp.Client.ApiResponse<PageInboxRulesetDto> GetInboxRulesetsWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.GetInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxRulesetDto>("/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxRulesetDto</returns>
        public async System.Threading.Tasks.Task<PageInboxRulesetDto> GetInboxRulesetsAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxRulesetDto> localVarResponse = await GetInboxRulesetsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get rulesets from (optional)</param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxRulesetDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxRulesetDto>> GetInboxRulesetsWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.GetInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxRulesetDto>("/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test an inbox ruleset Test an inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        public InboxRulesetTestResult TestInboxRuleset(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = TestInboxRulesetWithHttpInfo(id, inboxRulesetTestOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test an inbox ruleset Test an inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetTestResult> TestInboxRulesetWithHttpInfo(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0)
        {
            // verify the required parameter 'inboxRulesetTestOptions' is set
            if (inboxRulesetTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxRulesetTestOptions' when calling InboxRulesetControllerApi->TestInboxRuleset");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = inboxRulesetTestOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxRulesetTestResult>("/rulesets/{id}/test", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test an inbox ruleset Test an inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        public async System.Threading.Tasks.Task<InboxRulesetTestResult> TestInboxRulesetAsync(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = await TestInboxRulesetWithHttpInfoAsync(id, inboxRulesetTestOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test an inbox ruleset Test an inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox ruleset</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetTestResult>> TestInboxRulesetWithHttpInfoAsync(Guid id, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'inboxRulesetTestOptions' is set
            if (inboxRulesetTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxRulesetTestOptions' when calling InboxRulesetControllerApi->TestInboxRuleset");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = inboxRulesetTestOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxRulesetTestResult>("/rulesets/{id}/test", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test receiving with inbox rulesets Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TestInboxRulesetReceivingResult</returns>
        public TestInboxRulesetReceivingResult TestInboxRulesetReceiving(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TestInboxRulesetReceivingResult> localVarResponse = TestInboxRulesetReceivingWithHttpInfo(testInboxRulesetReceivingOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test receiving with inbox rulesets Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TestInboxRulesetReceivingResult</returns>
        public mailslurp.Client.ApiResponse<TestInboxRulesetReceivingResult> TestInboxRulesetReceivingWithHttpInfo(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0)
        {
            // verify the required parameter 'testInboxRulesetReceivingOptions' is set
            if (testInboxRulesetReceivingOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testInboxRulesetReceivingOptions' when calling InboxRulesetControllerApi->TestInboxRulesetReceiving");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testInboxRulesetReceivingOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetReceiving";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<TestInboxRulesetReceivingResult>("/rulesets/test-receiving", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetReceiving", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test receiving with inbox rulesets Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TestInboxRulesetReceivingResult</returns>
        public async System.Threading.Tasks.Task<TestInboxRulesetReceivingResult> TestInboxRulesetReceivingAsync(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TestInboxRulesetReceivingResult> localVarResponse = await TestInboxRulesetReceivingWithHttpInfoAsync(testInboxRulesetReceivingOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test receiving with inbox rulesets Test whether inbound emails from an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetReceivingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TestInboxRulesetReceivingResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TestInboxRulesetReceivingResult>> TestInboxRulesetReceivingWithHttpInfoAsync(TestInboxRulesetReceivingOptions testInboxRulesetReceivingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'testInboxRulesetReceivingOptions' is set
            if (testInboxRulesetReceivingOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testInboxRulesetReceivingOptions' when calling InboxRulesetControllerApi->TestInboxRulesetReceiving");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testInboxRulesetReceivingOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetReceiving";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<TestInboxRulesetReceivingResult>("/rulesets/test-receiving", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetReceiving", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test sending with inbox rulesets Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>TestInboxRulesetSendingResult</returns>
        public TestInboxRulesetSendingResult TestInboxRulesetSending(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<TestInboxRulesetSendingResult> localVarResponse = TestInboxRulesetSendingWithHttpInfo(testInboxRulesetSendingOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test sending with inbox rulesets Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of TestInboxRulesetSendingResult</returns>
        public mailslurp.Client.ApiResponse<TestInboxRulesetSendingResult> TestInboxRulesetSendingWithHttpInfo(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0)
        {
            // verify the required parameter 'testInboxRulesetSendingOptions' is set
            if (testInboxRulesetSendingOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testInboxRulesetSendingOptions' when calling InboxRulesetControllerApi->TestInboxRulesetSending");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testInboxRulesetSendingOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetSending";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<TestInboxRulesetSendingResult>("/rulesets/test-sending", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetSending", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test sending with inbox rulesets Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of TestInboxRulesetSendingResult</returns>
        public async System.Threading.Tasks.Task<TestInboxRulesetSendingResult> TestInboxRulesetSendingAsync(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<TestInboxRulesetSendingResult> localVarResponse = await TestInboxRulesetSendingWithHttpInfoAsync(testInboxRulesetSendingOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test sending with inbox rulesets Test whether outbound emails to an email address would be blocked or allowed by inbox rulesets
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testInboxRulesetSendingOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (TestInboxRulesetSendingResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<TestInboxRulesetSendingResult>> TestInboxRulesetSendingWithHttpInfoAsync(TestInboxRulesetSendingOptions testInboxRulesetSendingOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'testInboxRulesetSendingOptions' is set
            if (testInboxRulesetSendingOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testInboxRulesetSendingOptions' when calling InboxRulesetControllerApi->TestInboxRulesetSending");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testInboxRulesetSendingOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetSending";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<TestInboxRulesetSendingResult>("/rulesets/test-sending", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetSending", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test inbox rulesets for inbox Test inbox rulesets for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        public InboxRulesetTestResult TestInboxRulesetsForInbox(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = TestInboxRulesetsForInboxWithHttpInfo(inboxId, inboxRulesetTestOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test inbox rulesets for inbox Test inbox rulesets for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetTestResult> TestInboxRulesetsForInboxWithHttpInfo(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0)
        {
            // verify the required parameter 'inboxRulesetTestOptions' is set
            if (inboxRulesetTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxRulesetTestOptions' when calling InboxRulesetControllerApi->TestInboxRulesetsForInbox");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = inboxRulesetTestOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetsForInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<InboxRulesetTestResult>("/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetsForInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test inbox rulesets for inbox Test inbox rulesets for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        public async System.Threading.Tasks.Task<InboxRulesetTestResult> TestInboxRulesetsForInboxAsync(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = await TestInboxRulesetsForInboxWithHttpInfoAsync(inboxId, inboxRulesetTestOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test inbox rulesets for inbox Test inbox rulesets for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxRulesetTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetTestResult>> TestInboxRulesetsForInboxWithHttpInfoAsync(Guid inboxId, InboxRulesetTestOptions inboxRulesetTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'inboxRulesetTestOptions' is set
            if (inboxRulesetTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxRulesetTestOptions' when calling InboxRulesetControllerApi->TestInboxRulesetsForInbox");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = inboxRulesetTestOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestInboxRulesetsForInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<InboxRulesetTestResult>("/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxRulesetsForInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test new inbox ruleset Test new inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetTestResult</returns>
        public InboxRulesetTestResult TestNewInboxRuleset(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = TestNewInboxRulesetWithHttpInfo(testNewInboxRulesetOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test new inbox ruleset Test new inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetTestResult> TestNewInboxRulesetWithHttpInfo(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0)
        {
            // verify the required parameter 'testNewInboxRulesetOptions' is set
            if (testNewInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testNewInboxRulesetOptions' when calling InboxRulesetControllerApi->TestNewInboxRuleset");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testNewInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestNewInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<InboxRulesetTestResult>("/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestNewInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test new inbox ruleset Test new inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetTestResult</returns>
        public async System.Threading.Tasks.Task<InboxRulesetTestResult> TestNewInboxRulesetAsync(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetTestResult> localVarResponse = await TestNewInboxRulesetWithHttpInfoAsync(testNewInboxRulesetOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test new inbox ruleset Test new inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetTestResult>> TestNewInboxRulesetWithHttpInfoAsync(TestNewInboxRulesetOptions testNewInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'testNewInboxRulesetOptions' is set
            if (testNewInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testNewInboxRulesetOptions' when calling InboxRulesetControllerApi->TestNewInboxRuleset");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testNewInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxRulesetControllerApi.TestNewInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<InboxRulesetTestResult>("/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestNewInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/InboxReplierControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxReplierControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create an inbox replier
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        InboxReplierDto CreateNewInboxReplier(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox replier
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        ApiResponse<InboxReplierDto> CreateNewInboxReplierWithHttpInfo(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0);
        /// <summary>
        /// Delete an inbox replier
        /// </summary>
        /// <remarks>
        /// Delete inbox replier
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxReplier(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox replier
        /// </summary>
        /// <remarks>
        /// Delete inbox replier
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxReplierWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Delete inbox repliers
        /// </summary>
        /// <remarks>
        /// Delete inbox repliers. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxRepliers(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Delete inbox repliers
        /// </summary>
        /// <remarks>
        /// Delete inbox repliers. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxRepliersWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get an inbox replier
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        InboxReplierDto GetInboxReplier(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get an inbox replier
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        ApiResponse<InboxReplierDto> GetInboxReplierWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get an inbox replier event list
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxReplierEvents</returns>
        PageInboxReplierEvents GetInboxReplierEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0);

        /// <summary>
        /// Get an inbox replier event list
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxReplierEvents</returns>
        ApiResponse<PageInboxReplierEvents> GetInboxReplierEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0);
        /// <summary>
        /// List inbox repliers
        /// </summary>
        /// <remarks>
        /// List all repliers attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxReplierDto</returns>
        PageInboxReplierDto GetInboxRepliers(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List inbox repliers
        /// </summary>
        /// <remarks>
        /// List all repliers attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxReplierDto</returns>
        ApiResponse<PageInboxReplierDto> GetInboxRepliersWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Update an inbox replier
        /// </summary>
        /// <remarks>
        /// Update inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        InboxReplierDto UpdateInboxReplier(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0);

        /// <summary>
        /// Update an inbox replier
        /// </summary>
        /// <remarks>
        /// Update inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        ApiResponse<InboxReplierDto> UpdateInboxReplierWithHttpInfo(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxReplierControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create an inbox replier
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        System.Threading.Tasks.Task<InboxReplierDto> CreateNewInboxReplierAsync(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox replier
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxReplierDto>> CreateNewInboxReplierWithHttpInfoAsync(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox replier
        /// </summary>
        /// <remarks>
        /// Delete inbox replier
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxReplierAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox replier
        /// </summary>
        /// <remarks>
        /// Delete inbox replier
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxReplierWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inbox repliers
        /// </summary>
        /// <remarks>
        /// Delete inbox repliers. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxRepliersAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inbox repliers
        /// </summary>
        /// <remarks>
        /// Delete inbox repliers. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxRepliersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox replier
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        System.Threading.Tasks.Task<InboxReplierDto> GetInboxReplierAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox replier
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxReplierDto>> GetInboxReplierWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox replier event list
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxReplierEvents</returns>
        System.Threading.Tasks.Task<PageInboxReplierEvents> GetInboxReplierEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox replier event list
        /// </summary>
        /// <remarks>
        /// Get inbox ruleset events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxReplierEvents)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxReplierEvents>> GetInboxReplierEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List inbox repliers
        /// </summary>
        /// <remarks>
        /// List all repliers attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxReplierDto</returns>
        System.Threading.Tasks.Task<PageInboxReplierDto> GetInboxRepliersAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List inbox repliers
        /// </summary>
        /// <remarks>
        /// List all repliers attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxReplierDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxReplierDto>> GetInboxRepliersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update an inbox replier
        /// </summary>
        /// <remarks>
        /// Update inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        System.Threading.Tasks.Task<InboxReplierDto> UpdateInboxReplierAsync(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update an inbox replier
        /// </summary>
        /// <remarks>
        /// Update inbox ruleset
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxReplierDto>> UpdateInboxReplierWithHttpInfoAsync(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxReplierControllerApi : IInboxReplierControllerApiSync, IInboxReplierControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxReplierControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxReplierControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public InboxReplierControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxReplierControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public InboxReplierControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create an inbox replier Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        public InboxReplierDto CreateNewInboxReplier(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = CreateNewInboxReplierWithHttpInfo(createInboxReplierOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox replier Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        public mailslurp.Client.ApiResponse<InboxReplierDto> CreateNewInboxReplierWithHttpInfo(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createInboxReplierOptions' is set
            if (createInboxReplierOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxReplierOptions' when calling InboxReplierControllerApi->CreateNewInboxReplier");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createInboxReplierOptions;

            localVarRequestOptions.Operation = "InboxReplierControllerApi.CreateNewInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxReplierDto>("/repliers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox replier Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        public async System.Threading.Tasks.Task<InboxReplierDto> CreateNewInboxReplierAsync(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = await CreateNewInboxReplierWithHttpInfoAsync(createInboxReplierOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox replier Create a new inbox rule for reply toing, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxReplierDto>> CreateNewInboxReplierWithHttpInfoAsync(CreateInboxReplierOptions createInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxReplierOptions' is set
            if (createInboxReplierOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxReplierOptions' when calling InboxReplierControllerApi->CreateNewInboxReplier");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createInboxReplierOptions;

            localVarRequestOptions.Operation = "InboxReplierControllerApi.CreateNewInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxReplierDto>("/repliers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox replier Delete inbox replier
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxReplier(Guid id, int operationIndex = 0)
        {
            DeleteInboxReplierWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox replier Delete inbox replier
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxReplierWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxReplierControllerApi.DeleteInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/repliers/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox replier Delete inbox replier
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxReplierAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxReplierWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox replier Delete inbox replier
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxReplierWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxReplierControllerApi.DeleteInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/repliers/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox repliers Delete inbox repliers. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxRepliers(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            DeleteInboxRepliersWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete inbox repliers Delete inbox repliers. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxRepliersWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.DeleteInboxRepliers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/repliers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRepliers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox repliers Delete inbox repliers. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxRepliersAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxRepliersWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inbox repliers Delete inbox repliers. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach replier to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxRepliersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.DeleteInboxRepliers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/repliers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxRepliers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox replier Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        public InboxReplierDto GetInboxReplier(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = GetInboxReplierWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox replier Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        public mailslurp.Client.ApiResponse<InboxReplierDto> GetInboxReplierWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxReplierDto>("/repliers/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox replier Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        public async System.Threading.Tasks.Task<InboxReplierDto> GetInboxReplierAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = await GetInboxReplierWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox replier Get inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxReplierDto>> GetInboxReplierWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxReplierDto>("/repliers/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox replier event list Get inbox ruleset events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxReplierEvents</returns>
        public PageInboxReplierEvents GetInboxReplierEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxReplierEvents> localVarResponse = GetInboxReplierEventsWithHttpInfo(id, page, size, sort);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox replier event list Get inbox ruleset events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxReplierEvents</returns>
        public mailslurp.Client.ApiResponse<PageInboxReplierEvents> GetInboxReplierEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxReplierEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxReplierEvents>("/repliers/{id}/events", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxReplierEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox replier event list Get inbox ruleset events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxReplierEvents</returns>
        public async System.Threading.Tasks.Task<PageInboxReplierEvents> GetInboxReplierEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxReplierEvents> localVarResponse = await GetInboxReplierEventsWithHttpInfoAsync(id, page, size, sort, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox replier event list Get inbox ruleset events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="page">Optional page index in inbox replier event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxReplierEvents)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxReplierEvents>> GetInboxReplierEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxReplierEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxReplierEvents>("/repliers/{id}/events", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxReplierEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox repliers List all repliers attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxReplierDto</returns>
        public PageInboxReplierDto GetInboxRepliers(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxReplierDto> localVarResponse = GetInboxRepliersWithHttpInfo(inboxId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox repliers List all repliers attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxReplierDto</returns>
        public mailslurp.Client.ApiResponse<PageInboxReplierDto> GetInboxRepliersWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxRepliers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxReplierDto>("/repliers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRepliers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox repliers List all repliers attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxReplierDto</returns>
        public async System.Threading.Tasks.Task<PageInboxReplierDto> GetInboxRepliersAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxReplierDto> localVarResponse = await GetInboxRepliersWithHttpInfoAsync(inboxId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox repliers List all repliers attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get repliers from (optional)</param>
        /// <param name="page">Optional page index in inbox replier list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox replier list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxReplierDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxReplierDto>> GetInboxRepliersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxReplierControllerApi.GetInboxRepliers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxReplierDto>("/repliers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxRepliers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox replier Update inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxReplierDto</returns>
        public InboxReplierDto UpdateInboxReplier(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = UpdateInboxReplierWithHttpInfo(id, updateInboxReplierOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox replier Update inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxReplierDto</returns>
        public mailslurp.Client.ApiResponse<InboxReplierDto> UpdateInboxReplierWithHttpInfo(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0)
        {
            // verify the required parameter 'updateInboxReplierOptions' is set
            if (updateInboxReplierOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateInboxReplierOptions' when calling InboxReplierControllerApi->UpdateInboxReplier");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = updateInboxReplierOptions;

            localVarRequestOptions.Operation = "InboxReplierControllerApi.UpdateInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<InboxReplierDto>("/repliers/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox replier Update inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxReplierDto</returns>
        public async System.Threading.Tasks.Task<InboxReplierDto> UpdateInboxReplierAsync(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxReplierDto> localVarResponse = await UpdateInboxReplierWithHttpInfoAsync(id, updateInboxReplierOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox replier Update inbox ruleset
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox replier</param>
        /// <param name="updateInboxReplierOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxReplierDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxReplierDto>> UpdateInboxReplierWithHttpInfoAsync(Guid id, UpdateInboxReplierOptions updateInboxReplierOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateInboxReplierOptions' is set
            if (updateInboxReplierOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateInboxReplierOptions' when calling InboxReplierControllerApi->UpdateInboxReplier");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = updateInboxReplierOptions;

            localVarRequestOptions.Operation = "InboxReplierControllerApi.UpdateInboxReplier";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<InboxReplierDto>("/repliers/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInboxReplier", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/InboxForwarderControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxForwarderControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        InboxForwarderDto CreateNewInboxForwarder(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        ApiResponse<InboxForwarderDto> CreateNewInboxForwarderWithHttpInfo(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0);
        /// <summary>
        /// Delete an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxForwarder(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxForwarderWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Delete inbox forwarders
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarders. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInboxForwarders(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Delete inbox forwarders
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarders. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxForwardersWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get all inbox forwarder events
        /// </summary>
        /// <remarks>
        /// Get all inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderEvents</returns>
        PageInboxForwarderEvents GetAllInboxForwarderEvents(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0);

        /// <summary>
        /// Get all inbox forwarder events
        /// </summary>
        /// <remarks>
        /// Get all inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderEvents</returns>
        ApiResponse<PageInboxForwarderEvents> GetAllInboxForwarderEventsWithHttpInfo(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0);
        /// <summary>
        /// Get a forwarder event
        /// </summary>
        /// <remarks>
        /// Get forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderEventDto</returns>
        InboxForwarderEventDto GetForwarderEvent(Guid eventId, int operationIndex = 0);

        /// <summary>
        /// Get a forwarder event
        /// </summary>
        /// <remarks>
        /// Get forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderEventDto</returns>
        ApiResponse<InboxForwarderEventDto> GetForwarderEventWithHttpInfo(Guid eventId, int operationIndex = 0);
        /// <summary>
        /// Get an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        InboxForwarderDto GetInboxForwarder(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        ApiResponse<InboxForwarderDto> GetInboxForwarderWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get an inbox forwarder event
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderEventDto</returns>
        InboxForwarderEventDto GetInboxForwarderEvent(Guid id, Guid eventId, int operationIndex = 0);

        /// <summary>
        /// Get an inbox forwarder event
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderEventDto</returns>
        ApiResponse<InboxForwarderEventDto> GetInboxForwarderEventWithHttpInfo(Guid id, Guid eventId, int operationIndex = 0);
        /// <summary>
        /// Get an inbox forwarder event list
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderEvents</returns>
        PageInboxForwarderEvents GetInboxForwarderEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0);

        /// <summary>
        /// Get an inbox forwarder event list
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderEvents</returns>
        ApiResponse<PageInboxForwarderEvents> GetInboxForwarderEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0);
        /// <summary>
        /// List inbox forwarders
        /// </summary>
        /// <remarks>
        /// List all forwarders attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderDto</returns>
        PageInboxForwarderDto GetInboxForwarders(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List inbox forwarders
        /// </summary>
        /// <remarks>
        /// List all forwarders attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderDto</returns>
        ApiResponse<PageInboxForwarderDto> GetInboxForwardersWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Test an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test an inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        InboxForwarderTestResult TestInboxForwarder(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0);

        /// <summary>
        /// Test an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test an inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        ApiResponse<InboxForwarderTestResult> TestInboxForwarderWithHttpInfo(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0);
        /// <summary>
        /// Test inbox forwarders for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox forwarders for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        InboxForwarderTestResult TestInboxForwardersForInbox(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0);

        /// <summary>
        /// Test inbox forwarders for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox forwarders for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        ApiResponse<InboxForwarderTestResult> TestInboxForwardersForInboxWithHttpInfo(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0);
        /// <summary>
        /// Test new inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test new inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        InboxForwarderTestResult TestNewInboxForwarder(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0);

        /// <summary>
        /// Test new inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test new inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        ApiResponse<InboxForwarderTestResult> TestNewInboxForwarderWithHttpInfo(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0);
        /// <summary>
        /// Update an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Update inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        InboxForwarderDto UpdateInboxForwarder(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0);

        /// <summary>
        /// Update an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Update inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        ApiResponse<InboxForwarderDto> UpdateInboxForwarderWithHttpInfo(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxForwarderControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        System.Threading.Tasks.Task<InboxForwarderDto> CreateNewInboxForwarderAsync(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderDto>> CreateNewInboxForwarderWithHttpInfoAsync(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxForwarderAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxForwarderWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inbox forwarders
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarders. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxForwardersAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inbox forwarders
        /// </summary>
        /// <remarks>
        /// Delete inbox forwarders. Accepts optional inboxId filter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxForwardersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all inbox forwarder events
        /// </summary>
        /// <remarks>
        /// Get all inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderEvents</returns>
        System.Threading.Tasks.Task<PageInboxForwarderEvents> GetAllInboxForwarderEventsAsync(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all inbox forwarder events
        /// </summary>
        /// <remarks>
        /// Get all inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderEvents)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxForwarderEvents>> GetAllInboxForwarderEventsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a forwarder event
        /// </summary>
        /// <remarks>
        /// Get forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderEventDto</returns>
        System.Threading.Tasks.Task<InboxForwarderEventDto> GetForwarderEventAsync(Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a forwarder event
        /// </summary>
        /// <remarks>
        /// Get forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderEventDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderEventDto>> GetForwarderEventWithHttpInfoAsync(Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        System.Threading.Tasks.Task<InboxForwarderDto> GetInboxForwarderAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderDto>> GetInboxForwarderWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox forwarder event
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderEventDto</returns>
        System.Threading.Tasks.Task<InboxForwarderEventDto> GetInboxForwarderEventAsync(Guid id, Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox forwarder event
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder event
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderEventDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderEventDto>> GetInboxForwarderEventWithHttpInfoAsync(Guid id, Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox forwarder event list
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderEvents</returns>
        System.Threading.Tasks.Task<PageInboxForwarderEvents> GetInboxForwarderEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox forwarder event list
        /// </summary>
        /// <remarks>
        /// Get inbox forwarder events
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderEvents)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxForwarderEvents>> GetInboxForwarderEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List inbox forwarders
        /// </summary>
        /// <remarks>
        /// List all forwarders attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderDto</returns>
        System.Threading.Tasks.Task<PageInboxForwarderDto> GetInboxForwardersAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List inbox forwarders
        /// </summary>
        /// <remarks>
        /// List all forwarders attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxForwarderDto>> GetInboxForwardersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test an inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        System.Threading.Tasks.Task<InboxForwarderTestResult> TestInboxForwarderAsync(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test an inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderTestResult>> TestInboxForwarderWithHttpInfoAsync(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test inbox forwarders for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox forwarders for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        System.Threading.Tasks.Task<InboxForwarderTestResult> TestInboxForwardersForInboxAsync(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test inbox forwarders for inbox
        /// </summary>
        /// <remarks>
        /// Test inbox forwarders for inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderTestResult>> TestInboxForwardersForInboxWithHttpInfoAsync(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Test new inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test new inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        System.Threading.Tasks.Task<InboxForwarderTestResult> TestNewInboxForwarderAsync(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Test new inbox forwarder
        /// </summary>
        /// <remarks>
        /// Test new inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderTestResult>> TestNewInboxForwarderWithHttpInfoAsync(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Update inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        System.Threading.Tasks.Task<InboxForwarderDto> UpdateInboxForwarderAsync(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update an inbox forwarder
        /// </summary>
        /// <remarks>
        /// Update inbox forwarder
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxForwarderDto>> UpdateInboxForwarderWithHttpInfoAsync(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxForwarderControllerApi : IInboxForwarderControllerApiSync, IInboxForwarderControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxForwarderControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxForwarderControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public InboxForwarderControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxForwarderControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public InboxForwarderControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create an inbox forwarder Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        public InboxForwarderDto CreateNewInboxForwarder(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = CreateNewInboxForwarderWithHttpInfo(inboxId, createInboxForwarderOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox forwarder Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderDto> CreateNewInboxForwarderWithHttpInfo(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createInboxForwarderOptions' is set
            if (createInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxForwarderOptions' when calling InboxForwarderControllerApi->CreateNewInboxForwarder");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = createInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.CreateNewInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxForwarderDto>("/forwarders", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox forwarder Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        public async System.Threading.Tasks.Task<InboxForwarderDto> CreateNewInboxForwarderAsync(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = await CreateNewInboxForwarderWithHttpInfoAsync(inboxId, createInboxForwarderOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox forwarder Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox id to attach forwarder to</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderDto>> CreateNewInboxForwarderWithHttpInfoAsync(Guid inboxId, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxForwarderOptions' is set
            if (createInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxForwarderOptions' when calling InboxForwarderControllerApi->CreateNewInboxForwarder");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = createInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.CreateNewInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxForwarderDto>("/forwarders", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox forwarder Delete inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxForwarder(Guid id, int operationIndex = 0)
        {
            DeleteInboxForwarderWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox forwarder Delete inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxForwarderWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.DeleteInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/forwarders/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox forwarder Delete inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxForwarderAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxForwarderWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox forwarder Delete inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxForwarderWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.DeleteInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/forwarders/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox forwarders Delete inbox forwarders. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInboxForwarders(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            DeleteInboxForwardersWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete inbox forwarders Delete inbox forwarders. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxForwardersWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.DeleteInboxForwarders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/forwarders", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxForwarders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox forwarders Delete inbox forwarders. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxForwardersAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxForwardersWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inbox forwarders Delete inbox forwarders. Accepts optional inboxId filter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to attach forwarder to (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxForwardersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.DeleteInboxForwarders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/forwarders", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInboxForwarders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox forwarder events Get all inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderEvents</returns>
        public PageInboxForwarderEvents GetAllInboxForwarderEvents(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderEvents> localVarResponse = GetAllInboxForwarderEventsWithHttpInfo(page, size, inboxId, sort);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox forwarder events Get all inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderEvents</returns>
        public mailslurp.Client.ApiResponse<PageInboxForwarderEvents> GetAllInboxForwarderEventsWithHttpInfo(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetAllInboxForwarderEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxForwarderEvents>("/forwarders/events", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxForwarderEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox forwarder events Get all inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderEvents</returns>
        public async System.Threading.Tasks.Task<PageInboxForwarderEvents> GetAllInboxForwarderEventsAsync(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderEvents> localVarResponse = await GetAllInboxForwarderEventsWithHttpInfoAsync(page, size, inboxId, sort, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox forwarder events Get all inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="inboxId">Optional inbox ID to filter for (optional)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderEvents)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxForwarderEvents>> GetAllInboxForwarderEventsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), Guid? inboxId = default(Guid?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetAllInboxForwarderEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxForwarderEvents>("/forwarders/events", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxForwarderEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a forwarder event Get forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderEventDto</returns>
        public InboxForwarderEventDto GetForwarderEvent(Guid eventId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderEventDto> localVarResponse = GetForwarderEventWithHttpInfo(eventId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a forwarder event Get forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderEventDto</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderEventDto> GetForwarderEventWithHttpInfo(Guid eventId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("eventId", mailslurp.Client.ClientUtils.ParameterToString(eventId)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetForwarderEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxForwarderEventDto>("/forwarders/events/{eventId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetForwarderEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a forwarder event Get forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderEventDto</returns>
        public async System.Threading.Tasks.Task<InboxForwarderEventDto> GetForwarderEventAsync(Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderEventDto> localVarResponse = await GetForwarderEventWithHttpInfoAsync(eventId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a forwarder event Get forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderEventDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderEventDto>> GetForwarderEventWithHttpInfoAsync(Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("eventId", mailslurp.Client.ClientUtils.ParameterToString(eventId)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetForwarderEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxForwarderEventDto>("/forwarders/events/{eventId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetForwarderEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder Get inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        public InboxForwarderDto GetInboxForwarder(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = GetInboxForwarderWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder Get inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderDto> GetInboxForwarderWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxForwarderDto>("/forwarders/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder Get inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        public async System.Threading.Tasks.Task<InboxForwarderDto> GetInboxForwarderAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = await GetInboxForwarderWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder Get inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderDto>> GetInboxForwarderWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxForwarderDto>("/forwarders/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder event Get inbox forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderEventDto</returns>
        public InboxForwarderEventDto GetInboxForwarderEvent(Guid id, Guid eventId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderEventDto> localVarResponse = GetInboxForwarderEventWithHttpInfo(id, eventId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder event Get inbox forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderEventDto</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderEventDto> GetInboxForwarderEventWithHttpInfo(Guid id, Guid eventId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.PathParameters.Add("eventId", mailslurp.Client.ClientUtils.ParameterToString(eventId)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarderEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxForwarderEventDto>("/forwarders/{id}/events/{eventId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarderEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder event Get inbox forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderEventDto</returns>
        public async System.Threading.Tasks.Task<InboxForwarderEventDto> GetInboxForwarderEventAsync(Guid id, Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderEventDto> localVarResponse = await GetInboxForwarderEventWithHttpInfoAsync(id, eventId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder event Get inbox forwarder event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="eventId">ID of inbox forwarder event</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderEventDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderEventDto>> GetInboxForwarderEventWithHttpInfoAsync(Guid id, Guid eventId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.PathParameters.Add("eventId", mailslurp.Client.ClientUtils.ParameterToString(eventId)); // path parameter

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarderEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxForwarderEventDto>("/forwarders/{id}/events/{eventId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarderEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder event list Get inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderEvents</returns>
        public PageInboxForwarderEvents GetInboxForwarderEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderEvents> localVarResponse = GetInboxForwarderEventsWithHttpInfo(id, page, size, sort);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder event list Get inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderEvents</returns>
        public mailslurp.Client.ApiResponse<PageInboxForwarderEvents> GetInboxForwarderEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarderEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxForwarderEvents>("/forwarders/{id}/events", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarderEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox forwarder event list Get inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderEvents</returns>
        public async System.Threading.Tasks.Task<PageInboxForwarderEvents> GetInboxForwarderEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderEvents> localVarResponse = await GetInboxForwarderEventsWithHttpInfoAsync(id, page, size, sort, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox forwarder event list Get inbox forwarder events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="page">Optional page index in inbox forwarder event list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder event list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderEvents)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxForwarderEvents>> GetInboxForwarderEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarderEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxForwarderEvents>("/forwarders/{id}/events", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarderEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox forwarders List all forwarders attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxForwarderDto</returns>
        public PageInboxForwarderDto GetInboxForwarders(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderDto> localVarResponse = GetInboxForwardersWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox forwarders List all forwarders attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxForwarderDto</returns>
        public mailslurp.Client.ApiResponse<PageInboxForwarderDto> GetInboxForwardersWithHttpInfo(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxForwarderDto>("/forwarders", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox forwarders List all forwarders attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxForwarderDto</returns>
        public async System.Threading.Tasks.Task<PageInboxForwarderDto> GetInboxForwardersAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxForwarderDto> localVarResponse = await GetInboxForwardersWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox forwarders List all forwarders attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox id to get forwarders from (optional)</param>
        /// <param name="page">Optional page index in inbox forwarder list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox forwarder list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxForwarderDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxForwarderDto>> GetInboxForwardersWithHttpInfoAsync(Guid? inboxId = default(Guid?), int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.GetInboxForwarders";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxForwarderDto>("/forwarders", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxForwarders", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test an inbox forwarder Test an inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        public InboxForwarderTestResult TestInboxForwarder(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = TestInboxForwarderWithHttpInfo(id, inboxForwarderTestOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test an inbox forwarder Test an inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderTestResult> TestInboxForwarderWithHttpInfo(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0)
        {
            // verify the required parameter 'inboxForwarderTestOptions' is set
            if (inboxForwarderTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxForwarderTestOptions' when calling InboxForwarderControllerApi->TestInboxForwarder");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = inboxForwarderTestOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxForwarderTestResult>("/forwarders/{id}/test", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test an inbox forwarder Test an inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        public async System.Threading.Tasks.Task<InboxForwarderTestResult> TestInboxForwarderAsync(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = await TestInboxForwarderWithHttpInfoAsync(id, inboxForwarderTestOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test an inbox forwarder Test an inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderTestResult>> TestInboxForwarderWithHttpInfoAsync(Guid id, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'inboxForwarderTestOptions' is set
            if (inboxForwarderTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxForwarderTestOptions' when calling InboxForwarderControllerApi->TestInboxForwarder");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = inboxForwarderTestOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxForwarderTestResult>("/forwarders/{id}/test", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test inbox forwarders for inbox Test inbox forwarders for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        public InboxForwarderTestResult TestInboxForwardersForInbox(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = TestInboxForwardersForInboxWithHttpInfo(inboxId, inboxForwarderTestOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test inbox forwarders for inbox Test inbox forwarders for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderTestResult> TestInboxForwardersForInboxWithHttpInfo(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0)
        {
            // verify the required parameter 'inboxForwarderTestOptions' is set
            if (inboxForwarderTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxForwarderTestOptions' when calling InboxForwarderControllerApi->TestInboxForwardersForInbox");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = inboxForwarderTestOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestInboxForwardersForInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<InboxForwarderTestResult>("/forwarders", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxForwardersForInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test inbox forwarders for inbox Test inbox forwarders for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        public async System.Threading.Tasks.Task<InboxForwarderTestResult> TestInboxForwardersForInboxAsync(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = await TestInboxForwardersForInboxWithHttpInfoAsync(inboxId, inboxForwarderTestOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test inbox forwarders for inbox Test inbox forwarders for inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox</param>
        /// <param name="inboxForwarderTestOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderTestResult>> TestInboxForwardersForInboxWithHttpInfoAsync(Guid inboxId, InboxForwarderTestOptions inboxForwarderTestOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'inboxForwarderTestOptions' is set
            if (inboxForwarderTestOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'inboxForwarderTestOptions' when calling InboxForwarderControllerApi->TestInboxForwardersForInbox");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = inboxForwarderTestOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestInboxForwardersForInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<InboxForwarderTestResult>("/forwarders", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestInboxForwardersForInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test new inbox forwarder Test new inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderTestResult</returns>
        public InboxForwarderTestResult TestNewInboxForwarder(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = TestNewInboxForwarderWithHttpInfo(testNewInboxForwarderOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test new inbox forwarder Test new inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderTestResult</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderTestResult> TestNewInboxForwarderWithHttpInfo(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0)
        {
            // verify the required parameter 'testNewInboxForwarderOptions' is set
            if (testNewInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testNewInboxForwarderOptions' when calling InboxForwarderControllerApi->TestNewInboxForwarder");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testNewInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestNewInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<InboxForwarderTestResult>("/forwarders", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestNewInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Test new inbox forwarder Test new inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderTestResult</returns>
        public async System.Threading.Tasks.Task<InboxForwarderTestResult> TestNewInboxForwarderAsync(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderTestResult> localVarResponse = await TestNewInboxForwarderWithHttpInfoAsync(testNewInboxForwarderOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Test new inbox forwarder Test new inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="testNewInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderTestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderTestResult>> TestNewInboxForwarderWithHttpInfoAsync(TestNewInboxForwarderOptions testNewInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'testNewInboxForwarderOptions' is set
            if (testNewInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'testNewInboxForwarderOptions' when calling InboxForwarderControllerApi->TestNewInboxForwarder");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = testNewInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.TestNewInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<InboxForwarderTestResult>("/forwarders", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("TestNewInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox forwarder Update inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxForwarderDto</returns>
        public InboxForwarderDto UpdateInboxForwarder(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = UpdateInboxForwarderWithHttpInfo(id, createInboxForwarderOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox forwarder Update inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxForwarderDto</returns>
        public mailslurp.Client.ApiResponse<InboxForwarderDto> UpdateInboxForwarderWithHttpInfo(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createInboxForwarderOptions' is set
            if (createInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxForwarderOptions' when calling InboxForwarderControllerApi->UpdateInboxForwarder");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.UpdateInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<InboxForwarderDto>("/forwarders/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox forwarder Update inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxForwarderDto</returns>
        public async System.Threading.Tasks.Task<InboxForwarderDto> UpdateInboxForwarderAsync(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxForwarderDto> localVarResponse = await UpdateInboxForwarderWithHttpInfoAsync(id, createInboxForwarderOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox forwarder Update inbox forwarder
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of inbox forwarder</param>
        /// <param name="createInboxForwarderOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxForwarderDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxForwarderDto>> UpdateInboxForwarderWithHttpInfoAsync(Guid id, CreateInboxForwarderOptions createInboxForwarderOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxForwarderOptions' is set
            if (createInboxForwarderOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxForwarderOptions' when calling InboxForwarderControllerApi->UpdateInboxForwarder");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createInboxForwarderOptions;

            localVarRequestOptions.Operation = "InboxForwarderControllerApi.UpdateInboxForwarder";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<InboxForwarderDto>("/forwarders/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInboxForwarder", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/InboxControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Cancel a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        ScheduledJobDto CancelScheduledJob(Guid jobId, int operationIndex = 0);

        /// <summary>
        /// Cancel a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        ApiResponse<ScheduledJobDto> CancelScheduledJobWithHttpInfo(Guid jobId, int operationIndex = 0);
        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes.
        /// </summary>
        /// <remarks>
        /// Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto CreateInbox(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0);

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes.
        /// </summary>
        /// <remarks>
        /// Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> CreateInboxWithHttpInfo(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0);
        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        InboxRulesetDto CreateInboxRuleset(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        ApiResponse<InboxRulesetDto> CreateInboxRulesetWithHttpInfo(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0);
        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto CreateInboxWithDefaults(int operationIndex = 0);

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> CreateInboxWithDefaultsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation.
        /// </summary>
        /// <remarks>
        /// Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto CreateInboxWithOptions(CreateInboxDto createInboxDto, int operationIndex = 0);

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation.
        /// </summary>
        /// <remarks>
        /// Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> CreateInboxWithOptionsWithHttpInfo(CreateInboxDto createInboxDto, int operationIndex = 0);
        /// <summary>
        /// Delete all emails in a given inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllInboxEmails(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Delete all emails in a given inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllInboxEmailsWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Delete all inboxes
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllInboxes(int operationIndex = 0);

        /// <summary>
        /// Delete all inboxes
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllInboxesWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete inboxes by description
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by description
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllInboxesByDescription(string description, int operationIndex = 0);

        /// <summary>
        /// Delete inboxes by description
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by description
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllInboxesByDescriptionWithHttpInfo(string description, int operationIndex = 0);
        /// <summary>
        /// Delete inboxes by name
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllInboxesByName(string name, int operationIndex = 0);

        /// <summary>
        /// Delete inboxes by name
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllInboxesByNameWithHttpInfo(string name, int operationIndex = 0);
        /// <summary>
        /// Delete inboxes by tag
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by tag
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllInboxesByTag(string tag, int operationIndex = 0);

        /// <summary>
        /// Delete inboxes by tag
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by tag
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllInboxesByTagWithHttpInfo(string tag, int operationIndex = 0);
        /// <summary>
        /// Delete inbox
        /// </summary>
        /// <remarks>
        /// Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteInbox(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Delete inbox
        /// </summary>
        /// <remarks>
        /// Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteInboxWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Does inbox exist
        /// </summary>
        /// <remarks>
        /// Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxExistsDto</returns>
        InboxExistsDto DoesInboxExist(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Does inbox exist
        /// </summary>
        /// <remarks>
        /// Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxExistsDto</returns>
        ApiResponse<InboxExistsDto> DoesInboxExistWithHttpInfo(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Remove expired inboxes
        /// </summary>
        /// <remarks>
        /// Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FlushExpiredInboxesResult</returns>
        FlushExpiredInboxesResult FlushExpired(DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Remove expired inboxes
        /// </summary>
        /// <remarks>
        /// Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FlushExpiredInboxesResult</returns>
        ApiResponse<FlushExpiredInboxesResult> FlushExpiredWithHttpInfo(DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// List All Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        PageInboxProjection GetAllInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// List All Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        ApiResponse<PageInboxProjection> GetAllInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// List All Inboxes Offset Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        PageInboxProjection GetAllInboxesOffsetPaginated(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// List All Inboxes Offset Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        ApiResponse<PageInboxProjection> GetAllInboxesOffsetPaginatedWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get all scheduled email sending jobs for account
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageScheduledJobs</returns>
        PageScheduledJobs GetAllScheduledJobs(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all scheduled email sending jobs for account
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageScheduledJobs</returns>
        ApiResponse<PageScheduledJobs> GetAllScheduledJobsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all email delivery statuses for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        [Obsolete]
        PageDeliveryStatus GetDeliveryStatusesByInboxId(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all email delivery statuses for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        [Obsolete]
        ApiResponse<PageDeliveryStatus> GetDeliveryStatusesByInboxIdWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead.
        /// </summary>
        /// <remarks>
        /// List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        List<EmailPreview> GetEmails(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead.
        /// </summary>
        /// <remarks>
        /// List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        ApiResponse<List<EmailPreview>> GetEmailsWithHttpInfo(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapAccessDetails</returns>
        ImapAccessDetails GetImapAccess(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapAccessDetails</returns>
        ApiResponse<ImapAccessDetails> GetImapAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapSmtpAccessDetails</returns>
        ImapSmtpAccessDetails GetImapSmtpAccess(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapSmtpAccessDetails</returns>
        ApiResponse<ImapSmtpAccessDetails> GetImapSmtpAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access details in .env format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string GetImapSmtpAccessEnv(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access details in .env format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> GetImapSmtpAccessEnvWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP server hosts
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapSmtpAccessServers</returns>
        ImapSmtpAccessServers GetImapSmtpAccessServers(int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP server hosts
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapSmtpAccessServers</returns>
        ApiResponse<ImapSmtpAccessServers> GetImapSmtpAccessServersWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get Inbox. Returns properties of an inbox.
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s properties, including its email address and ID.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto GetInbox(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Get Inbox. Returns properties of an inbox.
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s properties, including its email address and ID.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> GetInboxWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Search for an inbox with the provided email address
        /// </summary>
        /// <remarks>
        /// Get a inbox result by email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxByEmailAddressResult</returns>
        InboxByEmailAddressResult GetInboxByEmailAddress(string emailAddress, int operationIndex = 0);

        /// <summary>
        /// Search for an inbox with the provided email address
        /// </summary>
        /// <remarks>
        /// Get a inbox result by email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxByEmailAddressResult</returns>
        ApiResponse<InboxByEmailAddressResult> GetInboxByEmailAddressWithHttpInfo(string emailAddress, int operationIndex = 0);
        /// <summary>
        /// Search for an inbox with the given name
        /// </summary>
        /// <remarks>
        /// Get a inbox result by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxByNameResult</returns>
        InboxByNameResult GetInboxByName(string name, int operationIndex = 0);

        /// <summary>
        /// Search for an inbox with the given name
        /// </summary>
        /// <remarks>
        /// Get a inbox result by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxByNameResult</returns>
        ApiResponse<InboxByNameResult> GetInboxByNameWithHttpInfo(string name, int operationIndex = 0);
        /// <summary>
        /// Get total inbox count
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        CountDto GetInboxCount(int operationIndex = 0);

        /// <summary>
        /// Get total inbox count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        ApiResponse<CountDto> GetInboxCountWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get email count in inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        CountDto GetInboxEmailCount(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Get email count in inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        ApiResponse<CountDto> GetInboxEmailCountWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Get inbox emails paginated
        /// </summary>
        /// <remarks>
        /// Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailPreview</returns>
        PageEmailPreview GetInboxEmailsPaginated(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get inbox emails paginated
        /// </summary>
        /// <remarks>
        /// Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailPreview</returns>
        ApiResponse<PageEmailPreview> GetInboxEmailsPaginatedWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get all inbox IDs
        /// </summary>
        /// <remarks>
        /// Get list of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxIdsResult</returns>
        [Obsolete]
        InboxIdsResult GetInboxIds(int operationIndex = 0);

        /// <summary>
        /// Get all inbox IDs
        /// </summary>
        /// <remarks>
        /// Get list of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxIdsResult</returns>
        [Obsolete]
        ApiResponse<InboxIdsResult> GetInboxIdsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get Inbox Sent Emails
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        [Obsolete]
        PageSentEmailProjection GetInboxSentEmails(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get Inbox Sent Emails
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        [Obsolete]
        ApiResponse<PageSentEmailProjection> GetInboxSentEmailsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get inbox tags
        /// </summary>
        /// <remarks>
        /// Get all inbox tags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        [Obsolete]
        List<string> GetInboxTags(int operationIndex = 0);

        /// <summary>
        /// Get inbox tags
        /// </summary>
        /// <remarks>
        /// Get all inbox tags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        [Obsolete]
        ApiResponse<List<string>> GetInboxTagsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// List Inboxes and email addresses
        /// </summary>
        /// <remarks>
        /// List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;InboxDto&gt;</returns>
        [Obsolete]
        List<InboxDto> GetInboxes(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List Inboxes and email addresses
        /// </summary>
        /// <remarks>
        /// List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;InboxDto&gt;</returns>
        [Obsolete]
        ApiResponse<List<InboxDto>> GetInboxesWithHttpInfo(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in an inbox or wait for one to arrive
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email GetLatestEmailInInbox(Guid inboxId, long timeoutMillis, int operationIndex = 0);

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in an inbox or wait for one to arrive
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> GetLatestEmailInInboxWithHttpInfo(Guid inboxId, long timeoutMillis, int operationIndex = 0);
        /// <summary>
        /// List Organization Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageOrganizationInboxProjection</returns>
        [Obsolete]
        PageOrganizationInboxProjection GetOrganizationInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List Organization Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageOrganizationInboxProjection</returns>
        [Obsolete]
        ApiResponse<PageOrganizationInboxProjection> GetOrganizationInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job details.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        ScheduledJobDto GetScheduledJob(Guid jobId, int operationIndex = 0);

        /// <summary>
        /// Get a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job details.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        ApiResponse<ScheduledJobDto> GetScheduledJobWithHttpInfo(Guid jobId, int operationIndex = 0);
        /// <summary>
        /// Get all scheduled email sending jobs for the inbox
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageScheduledJobs</returns>
        PageScheduledJobs GetScheduledJobsByInboxId(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageScheduledJobs</returns>
        ApiResponse<PageScheduledJobs> GetScheduledJobsByInboxIdWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmtpAccessDetails</returns>
        SmtpAccessDetails GetSmtpAccess(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmtpAccessDetails</returns>
        ApiResponse<SmtpAccessDetails> GetSmtpAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Is email address available
        /// </summary>
        /// <remarks>
        /// Returns whether an email address is available
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailAvailableResult</returns>
        EmailAvailableResult IsEmailAddressAvailable(string emailAddress, int operationIndex = 0);

        /// <summary>
        /// Is email address available
        /// </summary>
        /// <remarks>
        /// Returns whether an email address is available
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailAvailableResult</returns>
        ApiResponse<EmailAvailableResult> IsEmailAddressAvailableWithHttpInfo(string emailAddress, int operationIndex = 0);
        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxRulesetDto</returns>
        PageInboxRulesetDto ListInboxRulesets(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxRulesetDto</returns>
        ApiResponse<PageInboxRulesetDto> ListInboxRulesetsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// List inbox tracking pixels
        /// </summary>
        /// <remarks>
        /// List all tracking pixels sent from an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        PageTrackingPixelProjection ListInboxTrackingPixels(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List inbox tracking pixels
        /// </summary>
        /// <remarks>
        /// List all tracking pixels sent from an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        ApiResponse<PageTrackingPixelProjection> ListInboxTrackingPixelsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Search all inboxes and return matching inboxes
        /// </summary>
        /// <remarks>
        /// Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        PageInboxProjection SearchInboxes(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0);

        /// <summary>
        /// Search all inboxes and return matching inboxes
        /// </summary>
        /// <remarks>
        /// Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        ApiResponse<PageInboxProjection> SearchInboxesWithHttpInfo(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0);
        /// <summary>
        /// Send Email
        /// </summary>
        /// <remarks>
        /// Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendEmail(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Send Email
        /// </summary>
        /// <remarks>
        /// Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendEmailWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Send email and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto SendEmailAndConfirm(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Send email and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> SendEmailAndConfirmWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Send email with queue
        /// </summary>
        /// <remarks>
        /// Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendEmailWithQueue(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Send email with queue
        /// </summary>
        /// <remarks>
        /// Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendEmailWithQueueWithHttpInfo(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto SendSmtpEnvelope(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0);

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> SendSmtpEnvelopeWithHttpInfo(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0);
        /// <summary>
        /// Send a test email to inbox
        /// </summary>
        /// <remarks>
        /// Send an inbox a test email to test email receiving is working
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendTestEmail(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Send a test email to inbox
        /// </summary>
        /// <remarks>
        /// Send an inbox a test email to test email receiving is working
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendTestEmailWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Send email with with delay or schedule
        /// </summary>
        /// <remarks>
        /// Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        ScheduledJobDto SendWithSchedule(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Send email with with delay or schedule
        /// </summary>
        /// <remarks>
        /// Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        ApiResponse<ScheduledJobDto> SendWithScheduleWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Set inbox favourited state
        /// </summary>
        /// <remarks>
        /// Set and return new favourite state for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto SetInboxFavourited(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0);

        /// <summary>
        /// Set inbox favourited state
        /// </summary>
        /// <remarks>
        /// Set and return new favourite state for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> SetInboxFavouritedWithHttpInfo(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void UpdateImapAccess(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> UpdateImapAccessWithHttpInfo(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable.
        /// </summary>
        /// <remarks>
        /// Update editable fields on an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto UpdateInbox(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0);

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable.
        /// </summary>
        /// <remarks>
        /// Update editable fields on an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> UpdateInboxWithHttpInfo(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void UpdateSmtpAccess(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> UpdateSmtpAccessWithHttpInfo(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Cancel a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        System.Threading.Tasks.Task<ScheduledJobDto> CancelScheduledJobAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Cancel a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ScheduledJobDto>> CancelScheduledJobWithHttpInfoAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes.
        /// </summary>
        /// <remarks>
        /// Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> CreateInboxAsync(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes.
        /// </summary>
        /// <remarks>
        /// Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> CreateInboxWithHttpInfoAsync(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        System.Threading.Tasks.Task<InboxRulesetDto> CreateInboxRulesetAsync(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox ruleset
        /// </summary>
        /// <remarks>
        /// Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxRulesetDto>> CreateInboxRulesetWithHttpInfoAsync(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> CreateInboxWithDefaultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> CreateInboxWithDefaultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation.
        /// </summary>
        /// <remarks>
        /// Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> CreateInboxWithOptionsAsync(CreateInboxDto createInboxDto, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation.
        /// </summary>
        /// <remarks>
        /// Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> CreateInboxWithOptionsWithHttpInfoAsync(CreateInboxDto createInboxDto, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all emails in a given inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllInboxEmailsAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all emails in a given inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllInboxEmailsWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all inboxes
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllInboxesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all inboxes
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllInboxesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inboxes by description
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by description
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllInboxesByDescriptionAsync(string description, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inboxes by description
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by description
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllInboxesByDescriptionWithHttpInfoAsync(string description, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inboxes by name
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllInboxesByNameAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inboxes by name
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllInboxesByNameWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inboxes by tag
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by tag
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllInboxesByTagAsync(string tag, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inboxes by tag
        /// </summary>
        /// <remarks>
        /// Permanently delete all inboxes by tag
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllInboxesByTagWithHttpInfoAsync(string tag, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inbox
        /// </summary>
        /// <remarks>
        /// Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inbox
        /// </summary>
        /// <remarks>
        /// Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Does inbox exist
        /// </summary>
        /// <remarks>
        /// Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxExistsDto</returns>
        System.Threading.Tasks.Task<InboxExistsDto> DoesInboxExistAsync(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Does inbox exist
        /// </summary>
        /// <remarks>
        /// Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxExistsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxExistsDto>> DoesInboxExistWithHttpInfoAsync(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Remove expired inboxes
        /// </summary>
        /// <remarks>
        /// Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FlushExpiredInboxesResult</returns>
        System.Threading.Tasks.Task<FlushExpiredInboxesResult> FlushExpiredAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Remove expired inboxes
        /// </summary>
        /// <remarks>
        /// Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FlushExpiredInboxesResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<FlushExpiredInboxesResult>> FlushExpiredWithHttpInfoAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List All Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        System.Threading.Tasks.Task<PageInboxProjection> GetAllInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List All Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxProjection>> GetAllInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List All Inboxes Offset Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        System.Threading.Tasks.Task<PageInboxProjection> GetAllInboxesOffsetPaginatedAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List All Inboxes Offset Paginated
        /// </summary>
        /// <remarks>
        /// List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxProjection>> GetAllInboxesOffsetPaginatedWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all scheduled email sending jobs for account
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageScheduledJobs</returns>
        System.Threading.Tasks.Task<PageScheduledJobs> GetAllScheduledJobsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all scheduled email sending jobs for account
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageScheduledJobs)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageScheduledJobs>> GetAllScheduledJobsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all email delivery statuses for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        [Obsolete]
        System.Threading.Tasks.Task<PageDeliveryStatus> GetDeliveryStatusesByInboxIdAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get all email delivery statuses for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<PageDeliveryStatus>> GetDeliveryStatusesByInboxIdWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead.
        /// </summary>
        /// <remarks>
        /// List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        System.Threading.Tasks.Task<List<EmailPreview>> GetEmailsAsync(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead.
        /// </summary>
        /// <remarks>
        /// List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<EmailPreview>>> GetEmailsWithHttpInfoAsync(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapAccessDetails</returns>
        System.Threading.Tasks.Task<ImapAccessDetails> GetImapAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapAccessDetails)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapAccessDetails>> GetImapAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapSmtpAccessDetails</returns>
        System.Threading.Tasks.Task<ImapSmtpAccessDetails> GetImapSmtpAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapSmtpAccessDetails)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapSmtpAccessDetails>> GetImapSmtpAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access details in .env format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> GetImapSmtpAccessEnvAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP access details in .env format
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> GetImapSmtpAccessEnvWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP server hosts
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapSmtpAccessServers</returns>
        System.Threading.Tasks.Task<ImapSmtpAccessServers> GetImapSmtpAccessServersAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get IMAP and SMTP server hosts
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapSmtpAccessServers)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapSmtpAccessServers>> GetImapSmtpAccessServersWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get Inbox. Returns properties of an inbox.
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s properties, including its email address and ID.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> GetInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get Inbox. Returns properties of an inbox.
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s properties, including its email address and ID.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> GetInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Search for an inbox with the provided email address
        /// </summary>
        /// <remarks>
        /// Get a inbox result by email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxByEmailAddressResult</returns>
        System.Threading.Tasks.Task<InboxByEmailAddressResult> GetInboxByEmailAddressAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Search for an inbox with the provided email address
        /// </summary>
        /// <remarks>
        /// Get a inbox result by email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxByEmailAddressResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxByEmailAddressResult>> GetInboxByEmailAddressWithHttpInfoAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Search for an inbox with the given name
        /// </summary>
        /// <remarks>
        /// Get a inbox result by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxByNameResult</returns>
        System.Threading.Tasks.Task<InboxByNameResult> GetInboxByNameAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Search for an inbox with the given name
        /// </summary>
        /// <remarks>
        /// Get a inbox result by name
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxByNameResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxByNameResult>> GetInboxByNameWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get total inbox count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        System.Threading.Tasks.Task<CountDto> GetInboxCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get total inbox count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<CountDto>> GetInboxCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email count in inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        System.Threading.Tasks.Task<CountDto> GetInboxEmailCountAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email count in inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<CountDto>> GetInboxEmailCountWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get inbox emails paginated
        /// </summary>
        /// <remarks>
        /// Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailPreview</returns>
        System.Threading.Tasks.Task<PageEmailPreview> GetInboxEmailsPaginatedAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get inbox emails paginated
        /// </summary>
        /// <remarks>
        /// Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailPreview)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailPreview>> GetInboxEmailsPaginatedWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all inbox IDs
        /// </summary>
        /// <remarks>
        /// Get list of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxIdsResult</returns>
        [Obsolete]
        System.Threading.Tasks.Task<InboxIdsResult> GetInboxIdsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all inbox IDs
        /// </summary>
        /// <remarks>
        /// Get list of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxIdsResult)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<InboxIdsResult>> GetInboxIdsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get Inbox Sent Emails
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        [Obsolete]
        System.Threading.Tasks.Task<PageSentEmailProjection> GetInboxSentEmailsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get Inbox Sent Emails
        /// </summary>
        /// <remarks>
        /// Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<PageSentEmailProjection>> GetInboxSentEmailsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get inbox tags
        /// </summary>
        /// <remarks>
        /// Get all inbox tags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        [Obsolete]
        System.Threading.Tasks.Task<List<string>> GetInboxTagsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get inbox tags
        /// </summary>
        /// <remarks>
        /// Get all inbox tags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<List<string>>> GetInboxTagsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List Inboxes and email addresses
        /// </summary>
        /// <remarks>
        /// List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;InboxDto&gt;</returns>
        [Obsolete]
        System.Threading.Tasks.Task<List<InboxDto>> GetInboxesAsync(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List Inboxes and email addresses
        /// </summary>
        /// <remarks>
        /// List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;InboxDto&gt;)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<List<InboxDto>>> GetInboxesWithHttpInfoAsync(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in an inbox or wait for one to arrive
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> GetLatestEmailInInboxAsync(Guid inboxId, long timeoutMillis, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in an inbox or wait for one to arrive
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> GetLatestEmailInInboxWithHttpInfoAsync(Guid inboxId, long timeoutMillis, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List Organization Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageOrganizationInboxProjection</returns>
        [Obsolete]
        System.Threading.Tasks.Task<PageOrganizationInboxProjection> GetOrganizationInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List Organization Inboxes Paginated
        /// </summary>
        /// <remarks>
        /// List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageOrganizationInboxProjection)</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<PageOrganizationInboxProjection>> GetOrganizationInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job details.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        System.Threading.Tasks.Task<ScheduledJobDto> GetScheduledJobAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a scheduled email job
        /// </summary>
        /// <remarks>
        /// Get a scheduled email job details.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ScheduledJobDto>> GetScheduledJobWithHttpInfoAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all scheduled email sending jobs for the inbox
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageScheduledJobs</returns>
        System.Threading.Tasks.Task<PageScheduledJobs> GetScheduledJobsByInboxIdAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox
        /// </summary>
        /// <remarks>
        /// Schedule sending of emails using scheduled jobs.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageScheduledJobs)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageScheduledJobs>> GetScheduledJobsByInboxIdWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmtpAccessDetails</returns>
        System.Threading.Tasks.Task<SmtpAccessDetails> GetSmtpAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmtpAccessDetails)</returns>
        System.Threading.Tasks.Task<ApiResponse<SmtpAccessDetails>> GetSmtpAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Is email address available
        /// </summary>
        /// <remarks>
        /// Returns whether an email address is available
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailAvailableResult</returns>
        System.Threading.Tasks.Task<EmailAvailableResult> IsEmailAddressAvailableAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Is email address available
        /// </summary>
        /// <remarks>
        /// Returns whether an email address is available
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailAvailableResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailAvailableResult>> IsEmailAddressAvailableWithHttpInfoAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxRulesetDto</returns>
        System.Threading.Tasks.Task<PageInboxRulesetDto> ListInboxRulesetsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List inbox rulesets
        /// </summary>
        /// <remarks>
        /// List all rulesets attached to an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxRulesetDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxRulesetDto>> ListInboxRulesetsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List inbox tracking pixels
        /// </summary>
        /// <remarks>
        /// List all tracking pixels sent from an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        System.Threading.Tasks.Task<PageTrackingPixelProjection> ListInboxTrackingPixelsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List inbox tracking pixels
        /// </summary>
        /// <remarks>
        /// List all tracking pixels sent from an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageTrackingPixelProjection>> ListInboxTrackingPixelsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Search all inboxes and return matching inboxes
        /// </summary>
        /// <remarks>
        /// Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        System.Threading.Tasks.Task<PageInboxProjection> SearchInboxesAsync(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Search all inboxes and return matching inboxes
        /// </summary>
        /// <remarks>
        /// Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageInboxProjection>> SearchInboxesWithHttpInfoAsync(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send Email
        /// </summary>
        /// <remarks>
        /// Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendEmailAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send Email
        /// </summary>
        /// <remarks>
        /// Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendEmailWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send email and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> SendEmailAndConfirmAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send email and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> SendEmailAndConfirmWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send email with queue
        /// </summary>
        /// <remarks>
        /// Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendEmailWithQueueAsync(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send email with queue
        /// </summary>
        /// <remarks>
        /// Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendEmailWithQueueWithHttpInfoAsync(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> SendSmtpEnvelopeAsync(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation
        /// </summary>
        /// <remarks>
        /// Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> SendSmtpEnvelopeWithHttpInfoAsync(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send a test email to inbox
        /// </summary>
        /// <remarks>
        /// Send an inbox a test email to test email receiving is working
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendTestEmailAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send a test email to inbox
        /// </summary>
        /// <remarks>
        /// Send an inbox a test email to test email receiving is working
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendTestEmailWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send email with with delay or schedule
        /// </summary>
        /// <remarks>
        /// Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        System.Threading.Tasks.Task<ScheduledJobDto> SendWithScheduleAsync(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send email with with delay or schedule
        /// </summary>
        /// <remarks>
        /// Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ScheduledJobDto>> SendWithScheduleWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Set inbox favourited state
        /// </summary>
        /// <remarks>
        /// Set and return new favourite state for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> SetInboxFavouritedAsync(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Set inbox favourited state
        /// </summary>
        /// <remarks>
        /// Set and return new favourite state for an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> SetInboxFavouritedWithHttpInfoAsync(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task UpdateImapAccessAsync(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update IMAP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> UpdateImapAccessWithHttpInfoAsync(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable.
        /// </summary>
        /// <remarks>
        /// Update editable fields on an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> UpdateInboxAsync(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable.
        /// </summary>
        /// <remarks>
        /// Update editable fields on an inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> UpdateInboxWithHttpInfoAsync(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task UpdateSmtpAccessAsync(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update SMTP access usernames and passwords
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> UpdateSmtpAccessWithHttpInfoAsync(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IInboxControllerApi : IInboxControllerApiSync, IInboxControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public InboxControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public InboxControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="InboxControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public InboxControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Cancel a scheduled email job Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        public ScheduledJobDto CancelScheduledJob(Guid jobId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = CancelScheduledJobWithHttpInfo(jobId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Cancel a scheduled email job Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        public mailslurp.Client.ApiResponse<ScheduledJobDto> CancelScheduledJobWithHttpInfo(Guid jobId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("jobId", mailslurp.Client.ClientUtils.ParameterToString(jobId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.CancelScheduledJob";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<ScheduledJobDto>("/inboxes/scheduled-jobs/{jobId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CancelScheduledJob", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Cancel a scheduled email job Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        public async System.Threading.Tasks.Task<ScheduledJobDto> CancelScheduledJobAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = await CancelScheduledJobWithHttpInfoAsync(jobId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Cancel a scheduled email job Get a scheduled email job and cancel it. Will fail if status of job is already cancelled, failed, or complete.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ScheduledJobDto>> CancelScheduledJobWithHttpInfoAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("jobId", mailslurp.Client.ClientUtils.ParameterToString(jobId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.CancelScheduledJob";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<ScheduledJobDto>("/inboxes/scheduled-jobs/{jobId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CancelScheduledJob", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes. Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto CreateInbox(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = CreateInboxWithHttpInfo(emailAddress, tags, name, description, useDomainPool, favourite, expiresAt, expiresIn, allowTeamAccess, inboxType, virtualInbox, useShortAddress, domainId, domainName, prefix);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes. Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> CreateInboxWithHttpInfo(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxDto>("/inboxes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes. Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> CreateInboxAsync(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await CreateInboxWithHttpInfoAsync(emailAddress, tags, name, description, useDomainPool, favourite, expiresAt, expiresIn, allowTeamAccess, inboxType, virtualInbox, useShortAddress, domainId, domainName, prefix, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox email address. An inbox has a real email address and can send and receive emails. Inboxes can be either &#x60;SMTP&#x60; or &#x60;HTTP&#x60; inboxes. Create a new inbox and with a randomized email address to send and receive from. Pass emailAddress parameter if you wish to use a specific email address. Creating an inbox is required before sending or receiving emails. If writing tests it is recommended that you create a new inbox during each test method so that it is unique and empty. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">A custom email address to use with the inbox. Defaults to null. When null MailSlurp will assign a random email address to the inbox such as &#x60;123@mailslurp.com&#x60;. If you use the &#x60;useDomainPool&#x60; option when the email address is null it will generate an email address with a more varied domain ending such as &#x60;123@mailslurp.info&#x60; or &#x60;123@mailslurp.biz&#x60;. When a custom email address is provided the address is split into a domain and the domain is queried against your user. If you have created the domain in the MailSlurp dashboard and verified it you can use any email address that ends with the domain. Note domain types must match the inbox type - so &#x60;SMTP&#x60; inboxes will only work with &#x60;SMTP&#x60; type domains. Avoid &#x60;SMTP&#x60; inboxes if you need to send emails as they can only receive. Send an email to this address and the inbox will receive and store it for you. To retrieve the email use the Inbox and Email Controller endpoints with the inbox ID. (optional)</param>
        /// <param name="tags">Tags that inbox has been tagged with. Tags can be added to inboxes to group different inboxes within an account. You can also search for inboxes by tag in the dashboard UI. (optional)</param>
        /// <param name="name">Optional name of the inbox. Displayed in the dashboard for easier search and used as the sender name when sending emails. (optional)</param>
        /// <param name="description">Optional description of the inbox for labelling purposes. Is shown in the dashboard and can be used with (optional)</param>
        /// <param name="useDomainPool">Use the MailSlurp domain name pool with this inbox when creating the email address. Defaults to null. If enabled the inbox will be an email address with a domain randomly chosen from a list of the MailSlurp domains. This is useful when the default &#x60;@mailslurp.com&#x60; email addresses used with inboxes are blocked or considered spam by a provider or receiving service. When domain pool is enabled an email address will be generated ending in &#x60;@mailslurp.{world,info,xyz,...}&#x60; . This means a TLD is randomly selecting from a list of &#x60;.biz&#x60;, &#x60;.info&#x60;, &#x60;.xyz&#x60; etc to add variance to the generated email addresses. When null or false MailSlurp uses the default behavior of &#x60;@mailslurp.com&#x60; or custom email address provided by the emailAddress field. Note this feature is only available for &#x60;HTTP&#x60; inbox types. (optional)</param>
        /// <param name="favourite">Is the inbox a favorite. Marking an inbox as a favorite is typically done in the dashboard for quick access or filtering (optional)</param>
        /// <param name="expiresAt">Optional inbox expiration date. If null then this inbox is permanent and the emails in it won&#39;t be deleted. If an expiration date is provided or is required by your plan the inbox will be closed when the expiration time is reached. Expired inboxes still contain their emails but can no longer send or receive emails. An ExpiredInboxRecord is created when an inbox and the email address and inbox ID are recorded. The expiresAt property is a timestamp string in ISO DateTime Format yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX. (optional)</param>
        /// <param name="expiresIn">Number of milliseconds that inbox should exist for (optional)</param>
        /// <param name="allowTeamAccess">DEPRECATED (team access is always true). Grant team access to this inbox and the emails that belong to it for team members of your organization. (optional)</param>
        /// <param name="inboxType">HTTP (default) or SMTP inbox type. HTTP inboxes are default and best solution for most cases. SMTP inboxes are more reliable for public inbound email consumption (but do not support sending emails). When using custom domains the domain type must match the inbox type. HTTP inboxes are processed by AWS SES while SMTP inboxes use a custom mail server running at &#x60;mxslurp.click&#x60;. (optional)</param>
        /// <param name="virtualInbox">Virtual inbox prevents any outbound emails from being sent. It creates sent email records but will never send real emails to recipients. Great for testing and faking email sending. (optional)</param>
        /// <param name="useShortAddress">Use a shorter email address under 31 characters (optional)</param>
        /// <param name="domainId">ID of custom domain to use for email address. (optional)</param>
        /// <param name="domainName">FQDN domain name for the domain you have verified. Will be appended with a randomly assigned recipient name. Use the &#x60;emailAddress&#x60; option instead to specify the full custom inbox. (optional)</param>
        /// <param name="prefix">Prefix to add before the email address for easier labelling or identification. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> CreateInboxWithHttpInfoAsync(string emailAddress = default(string), List<string> tags = default(List<string>), string name = default(string), string description = default(string), bool? useDomainPool = default(bool?), bool? favourite = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), bool? allowTeamAccess = default(bool?), string inboxType = default(string), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), Guid? domainId = default(Guid?), string domainName = default(string), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxDto>("/inboxes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxRulesetDto</returns>
        public InboxRulesetDto CreateInboxRuleset(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = CreateInboxRulesetWithHttpInfo(inboxId, createInboxRulesetOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxRulesetDto</returns>
        public mailslurp.Client.ApiResponse<InboxRulesetDto> CreateInboxRulesetWithHttpInfo(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createInboxRulesetOptions' is set
            if (createInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxRulesetOptions' when calling InboxControllerApi->CreateInboxRuleset");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = createInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxRulesetDto>("/inboxes/{inboxId}/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxRulesetDto</returns>
        public async System.Threading.Tasks.Task<InboxRulesetDto> CreateInboxRulesetAsync(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxRulesetDto> localVarResponse = await CreateInboxRulesetWithHttpInfoAsync(inboxId, createInboxRulesetOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox ruleset Create a new inbox rule for forwarding, blocking, and allowing emails when sending and receiving
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">inboxId</param>
        /// <param name="createInboxRulesetOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxRulesetDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxRulesetDto>> CreateInboxRulesetWithHttpInfoAsync(Guid inboxId, CreateInboxRulesetOptions createInboxRulesetOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxRulesetOptions' is set
            if (createInboxRulesetOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxRulesetOptions' when calling InboxControllerApi->CreateInboxRuleset");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = createInboxRulesetOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxRuleset";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxRulesetDto>("/inboxes/{inboxId}/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxRuleset", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto CreateInboxWithDefaults(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = CreateInboxWithDefaultsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> CreateInboxWithDefaultsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxWithDefaults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxDto>("/inboxes/withDefaults", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxWithDefaults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> CreateInboxWithDefaultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await CreateInboxWithDefaultsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox with default options. Uses MailSlurp domain pool address and is private. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> CreateInboxWithDefaultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxWithDefaults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxDto>("/inboxes/withDefaults", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxWithDefaults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation. Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto CreateInboxWithOptions(CreateInboxDto createInboxDto, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = CreateInboxWithOptionsWithHttpInfo(createInboxDto);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation. Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> CreateInboxWithOptionsWithHttpInfo(CreateInboxDto createInboxDto, int operationIndex = 0)
        {
            // verify the required parameter 'createInboxDto' is set
            if (createInboxDto == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxDto' when calling InboxControllerApi->CreateInboxWithOptions");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createInboxDto;

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxWithOptions";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxDto>("/inboxes/withOptions", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxWithOptions", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation. Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> CreateInboxWithOptionsAsync(CreateInboxDto createInboxDto, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await CreateInboxWithOptionsWithHttpInfoAsync(createInboxDto, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox with options. Extended options for inbox creation. Additional endpoint that allows inbox creation with request body options. Can be more flexible that other methods for some clients.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createInboxDto"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> CreateInboxWithOptionsWithHttpInfoAsync(CreateInboxDto createInboxDto, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createInboxDto' is set
            if (createInboxDto == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createInboxDto' when calling InboxControllerApi->CreateInboxWithOptions");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createInboxDto;

            localVarRequestOptions.Operation = "InboxControllerApi.CreateInboxWithOptions";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxDto>("/inboxes/withOptions", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateInboxWithOptions", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in a given inboxes. Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllInboxEmails(Guid inboxId, int operationIndex = 0)
        {
            DeleteAllInboxEmailsWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete all emails in a given inboxes. Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllInboxEmailsWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/{inboxId}/deleteAllInboxEmails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in a given inboxes. Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllInboxEmailsAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllInboxEmailsWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all emails in a given inboxes. Deletes all emails in an inbox. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllInboxEmailsWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/{inboxId}/deleteAllInboxEmails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all inboxes Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllInboxes(int operationIndex = 0)
        {
            DeleteAllInboxesWithHttpInfo();
        }

        /// <summary>
        /// Delete all inboxes Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllInboxesWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all inboxes Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllInboxesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllInboxesWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all inboxes Permanently delete all inboxes and associated email addresses. This will also delete all emails within the inboxes. Be careful as inboxes cannot be recovered once deleted. Note: deleting inboxes will not impact your usage limits. Monthly inbox creation limits are based on how many inboxes were created in the last 30 days, not how many inboxes you currently have.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllInboxesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by description Permanently delete all inboxes by description
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllInboxesByDescription(string description, int operationIndex = 0)
        {
            DeleteAllInboxesByDescriptionWithHttpInfo(description);
        }

        /// <summary>
        /// Delete inboxes by description Permanently delete all inboxes by description
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllInboxesByDescriptionWithHttpInfo(string description, int operationIndex = 0)
        {
            // verify the required parameter 'description' is set
            if (description == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'description' when calling InboxControllerApi->DeleteAllInboxesByDescription");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByDescription";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/by-description", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByDescription", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by description Permanently delete all inboxes by description
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllInboxesByDescriptionAsync(string description, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllInboxesByDescriptionWithHttpInfoAsync(description, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inboxes by description Permanently delete all inboxes by description
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="description"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllInboxesByDescriptionWithHttpInfoAsync(string description, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'description' is set
            if (description == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'description' when calling InboxControllerApi->DeleteAllInboxesByDescription");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByDescription";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/by-description", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByDescription", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by name Permanently delete all inboxes by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllInboxesByName(string name, int operationIndex = 0)
        {
            DeleteAllInboxesByNameWithHttpInfo(name);
        }

        /// <summary>
        /// Delete inboxes by name Permanently delete all inboxes by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllInboxesByNameWithHttpInfo(string name, int operationIndex = 0)
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling InboxControllerApi->DeleteAllInboxesByName");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByName";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/by-name", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByName", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by name Permanently delete all inboxes by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllInboxesByNameAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllInboxesByNameWithHttpInfoAsync(name, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inboxes by name Permanently delete all inboxes by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllInboxesByNameWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling InboxControllerApi->DeleteAllInboxesByName");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByName";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/by-name", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByName", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by tag Permanently delete all inboxes by tag
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllInboxesByTag(string tag, int operationIndex = 0)
        {
            DeleteAllInboxesByTagWithHttpInfo(tag);
        }

        /// <summary>
        /// Delete inboxes by tag Permanently delete all inboxes by tag
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllInboxesByTagWithHttpInfo(string tag, int operationIndex = 0)
        {
            // verify the required parameter 'tag' is set
            if (tag == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'tag' when calling InboxControllerApi->DeleteAllInboxesByTag");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByTag";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/by-tag", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByTag", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inboxes by tag Permanently delete all inboxes by tag
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllInboxesByTagAsync(string tag, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllInboxesByTagWithHttpInfoAsync(tag, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inboxes by tag Permanently delete all inboxes by tag
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="tag"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllInboxesByTagWithHttpInfoAsync(string tag, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'tag' is set
            if (tag == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'tag' when calling InboxControllerApi->DeleteAllInboxesByTag");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteAllInboxesByTag";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/by-tag", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllInboxesByTag", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteInbox(Guid inboxId, int operationIndex = 0)
        {
            DeleteInboxWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete inbox Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteInboxWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteInboxWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inbox Permanently delete an inbox and associated email address as well as all emails within the given inbox. This action cannot be undone. Note: deleting an inbox will not affect your account usage. Monthly inbox usage is based on how many inboxes you create within 30 days, not how many exist at time of request.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.DeleteInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Does inbox exist Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxExistsDto</returns>
        public InboxExistsDto DoesInboxExist(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxExistsDto> localVarResponse = DoesInboxExistWithHttpInfo(emailAddress, allowCatchAll);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Does inbox exist Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxExistsDto</returns>
        public mailslurp.Client.ApiResponse<InboxExistsDto> DoesInboxExistWithHttpInfo(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0)
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->DoesInboxExist");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            if (allowCatchAll != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowCatchAll", allowCatchAll));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.DoesInboxExist";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxExistsDto>("/inboxes/exists", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DoesInboxExist", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Does inbox exist Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxExistsDto</returns>
        public async System.Threading.Tasks.Task<InboxExistsDto> DoesInboxExistAsync(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxExistsDto> localVarResponse = await DoesInboxExistWithHttpInfoAsync(emailAddress, allowCatchAll, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Does inbox exist Check if inboxes exist by email address. Useful if you are sending emails to mailslurp addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress">Email address</param>
        /// <param name="allowCatchAll"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxExistsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxExistsDto>> DoesInboxExistWithHttpInfoAsync(string emailAddress, bool? allowCatchAll = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->DoesInboxExist");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            if (allowCatchAll != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowCatchAll", allowCatchAll));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.DoesInboxExist";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxExistsDto>("/inboxes/exists", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DoesInboxExist", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Remove expired inboxes Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FlushExpiredInboxesResult</returns>
        public FlushExpiredInboxesResult FlushExpired(DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<FlushExpiredInboxesResult> localVarResponse = FlushExpiredWithHttpInfo(before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Remove expired inboxes Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FlushExpiredInboxesResult</returns>
        public mailslurp.Client.ApiResponse<FlushExpiredInboxesResult> FlushExpiredWithHttpInfo(DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.FlushExpired";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<FlushExpiredInboxesResult>("/inboxes/expired", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("FlushExpired", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Remove expired inboxes Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FlushExpiredInboxesResult</returns>
        public async System.Threading.Tasks.Task<FlushExpiredInboxesResult> FlushExpiredAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<FlushExpiredInboxesResult> localVarResponse = await FlushExpiredWithHttpInfoAsync(before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Remove expired inboxes Remove any expired inboxes for your account (instead of waiting for scheduled removal on server)
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="before">Optional expired at before flag to flush expired inboxes that have expired before the given time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FlushExpiredInboxesResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<FlushExpiredInboxesResult>> FlushExpiredWithHttpInfoAsync(DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.FlushExpired";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<FlushExpiredInboxesResult>("/inboxes/expired", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("FlushExpired", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List All Inboxes Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        public PageInboxProjection GetAllInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = GetAllInboxesWithHttpInfo(page, size, sort, favourite, search, tag, teamAccess, since, before, inboxType, inboxFunction, domainId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List All Inboxes Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        public mailslurp.Client.ApiResponse<PageInboxProjection> GetAllInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (tag != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));
            }
            if (teamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "teamAccess", teamAccess));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (inboxFunction != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxFunction", inboxFunction));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxProjection>("/inboxes/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List All Inboxes Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        public async System.Threading.Tasks.Task<PageInboxProjection> GetAllInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = await GetAllInboxesWithHttpInfoAsync(page, size, sort, favourite, search, tag, teamAccess, since, before, inboxType, inboxFunction, domainId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List All Inboxes Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxProjection>> GetAllInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (tag != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));
            }
            if (teamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "teamAccess", teamAccess));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (inboxFunction != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxFunction", inboxFunction));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxProjection>("/inboxes/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List All Inboxes Offset Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        public PageInboxProjection GetAllInboxesOffsetPaginated(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = GetAllInboxesOffsetPaginatedWithHttpInfo(page, size, sort, favourite, search, tag, teamAccess, since, before, inboxType, inboxFunction, domainId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List All Inboxes Offset Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        public mailslurp.Client.ApiResponse<PageInboxProjection> GetAllInboxesOffsetPaginatedWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (tag != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));
            }
            if (teamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "teamAccess", teamAccess));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (inboxFunction != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxFunction", inboxFunction));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllInboxesOffsetPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxProjection>("/inboxes/offset-paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxesOffsetPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List All Inboxes Offset Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        public async System.Threading.Tasks.Task<PageInboxProjection> GetAllInboxesOffsetPaginatedAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = await GetAllInboxesOffsetPaginatedWithHttpInfoAsync(page, size, sort, favourite, search, tag, teamAccess, since, before, inboxType, inboxFunction, domainId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List All Inboxes Offset Paginated List inboxes in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="favourite">Optionally filter results for favourites only (optional, default to false)</param>
        /// <param name="search">Optionally filter by search words partial matching ID, tags, name, and email address (optional)</param>
        /// <param name="tag">Optionally filter by tags. Will return inboxes that include given tags (optional)</param>
        /// <param name="teamAccess">DEPRECATED. Optionally filter by team access. (optional) (deprecated)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="inboxType">Optional filter by inbox type (optional)</param>
        /// <param name="inboxFunction">Optional filter by inbox function (optional)</param>
        /// <param name="domainId">Optional domain ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxProjection>> GetAllInboxesOffsetPaginatedWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), bool? favourite = default(bool?), string search = default(string), string tag = default(string), bool? teamAccess = default(bool?), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string inboxType = default(string), string inboxFunction = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (tag != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "tag", tag));
            }
            if (teamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "teamAccess", teamAccess));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (inboxFunction != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxFunction", inboxFunction));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllInboxesOffsetPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxProjection>("/inboxes/offset-paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllInboxesOffsetPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for account Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageScheduledJobs</returns>
        public PageScheduledJobs GetAllScheduledJobs(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageScheduledJobs> localVarResponse = GetAllScheduledJobsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for account Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageScheduledJobs</returns>
        public mailslurp.Client.ApiResponse<PageScheduledJobs> GetAllScheduledJobsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllScheduledJobs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageScheduledJobs>("/inboxes/scheduled-jobs", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllScheduledJobs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for account Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageScheduledJobs</returns>
        public async System.Threading.Tasks.Task<PageScheduledJobs> GetAllScheduledJobsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageScheduledJobs> localVarResponse = await GetAllScheduledJobsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for account Schedule sending of emails using scheduled jobs. These can be inbox or account level.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageScheduledJobs)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageScheduledJobs>> GetAllScheduledJobsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetAllScheduledJobs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageScheduledJobs>("/inboxes/scheduled-jobs", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllScheduledJobs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all email delivery statuses for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageDeliveryStatus</returns>
        [Obsolete]
        public PageDeliveryStatus GetDeliveryStatusesByInboxId(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = GetDeliveryStatusesByInboxIdWithHttpInfo(inboxId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all email delivery statuses for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageDeliveryStatus</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<PageDeliveryStatus> GetDeliveryStatusesByInboxIdWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetDeliveryStatusesByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageDeliveryStatus>("/inboxes/{inboxId}/delivery-status", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDeliveryStatusesByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get all email delivery statuses for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageDeliveryStatus</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<PageDeliveryStatus> GetDeliveryStatusesByInboxIdAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageDeliveryStatus> localVarResponse = await GetDeliveryStatusesByInboxIdWithHttpInfoAsync(inboxId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get all email delivery statuses for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in delivery status list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in delivery status list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageDeliveryStatus)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageDeliveryStatus>> GetDeliveryStatusesByInboxIdWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetDeliveryStatusesByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageDeliveryStatus>("/inboxes/{inboxId}/delivery-status", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDeliveryStatusesByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead. List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;EmailPreview&gt;</returns>
        public List<EmailPreview> GetEmails(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = GetEmailsWithHttpInfo(inboxId, size, limit, sort, retryTimeout, delayTimeout, minCount, unreadOnly, before, since);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead. List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;EmailPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<EmailPreview>> GetEmailsWithHttpInfo(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (limit != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "limit", limit));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (retryTimeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "retryTimeout", retryTimeout));
            }
            if (delayTimeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delayTimeout", delayTimeout));
            }
            if (minCount != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minCount", minCount));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<EmailPreview>>("/inboxes/{inboxId}/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead. List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;EmailPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<EmailPreview>> GetEmailsAsync(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<EmailPreview>> localVarResponse = await GetEmailsWithHttpInfoAsync(inboxId, size, limit, sort, retryTimeout, delayTimeout, minCount, unreadOnly, before, since, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get emails in an Inbox. This method is not idempotent as it allows retries and waits if you want certain conditions to be met before returning. For simple listing and sorting of known emails use the email controller instead. List emails that an inbox has received. Only emails that are sent to the inbox&#39;s email address will appear in the inbox. It may take several seconds for any email you send to an inbox&#39;s email address to appear in the inbox. To make this endpoint wait for a minimum number of emails use the &#x60;minCount&#x60; parameter. The server will retry the inbox database until the &#x60;minCount&#x60; is satisfied or the &#x60;retryTimeout&#x60; is reached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="size">Alias for limit. Assessed first before assessing any passed limit. (optional)</param>
        /// <param name="limit">Limit the result set, ordered by received date time sort direction. Maximum 100. For more listing options see the email controller (optional)</param>
        /// <param name="sort">Sort the results by received date and direction ASC or DESC (optional)</param>
        /// <param name="retryTimeout">Maximum milliseconds to spend retrying inbox database until minCount emails are returned (optional)</param>
        /// <param name="delayTimeout"> (optional)</param>
        /// <param name="minCount">Minimum acceptable email count. Will cause request to hang (and retry) until minCount is satisfied or retryTimeout is reached. (optional)</param>
        /// <param name="unreadOnly"> (optional)</param>
        /// <param name="before">Exclude emails received after this ISO 8601 date time (optional)</param>
        /// <param name="since">Exclude emails received before this ISO 8601 date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;EmailPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<EmailPreview>>> GetEmailsWithHttpInfoAsync(Guid inboxId, int? size = default(int?), int? limit = default(int?), string sort = default(string), long? retryTimeout = default(long?), long? delayTimeout = default(long?), long? minCount = default(long?), bool? unreadOnly = default(bool?), DateTime? before = default(DateTime?), DateTime? since = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (limit != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "limit", limit));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (retryTimeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "retryTimeout", retryTimeout));
            }
            if (delayTimeout != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "delayTimeout", delayTimeout));
            }
            if (minCount != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "minCount", minCount));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<EmailPreview>>("/inboxes/{inboxId}/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapAccessDetails</returns>
        public ImapAccessDetails GetImapAccess(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapAccessDetails> localVarResponse = GetImapAccessWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapAccessDetails</returns>
        public mailslurp.Client.ApiResponse<ImapAccessDetails> GetImapAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ImapAccessDetails>("/inboxes/imap-access", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapAccessDetails</returns>
        public async System.Threading.Tasks.Task<ImapAccessDetails> GetImapAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapAccessDetails> localVarResponse = await GetImapAccessWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapAccessDetails)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapAccessDetails>> GetImapAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ImapAccessDetails>("/inboxes/imap-access", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapSmtpAccessDetails</returns>
        public ImapSmtpAccessDetails GetImapSmtpAccess(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapSmtpAccessDetails> localVarResponse = GetImapSmtpAccessWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapSmtpAccessDetails</returns>
        public mailslurp.Client.ApiResponse<ImapSmtpAccessDetails> GetImapSmtpAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ImapSmtpAccessDetails>("/inboxes/imap-smtp-access", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapSmtpAccessDetails</returns>
        public async System.Threading.Tasks.Task<ImapSmtpAccessDetails> GetImapSmtpAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapSmtpAccessDetails> localVarResponse = await GetImapSmtpAccessWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapSmtpAccessDetails)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapSmtpAccessDetails>> GetImapSmtpAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ImapSmtpAccessDetails>("/inboxes/imap-smtp-access", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP access details in .env format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string GetImapSmtpAccessEnv(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = GetImapSmtpAccessEnvWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP access details in .env format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> GetImapSmtpAccessEnvWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccessEnv";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<string>("/inboxes/imap-smtp-access/env", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccessEnv", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP access details in .env format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> GetImapSmtpAccessEnvAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await GetImapSmtpAccessEnvWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP access details in .env format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> GetImapSmtpAccessEnvWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccessEnv";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<string>("/inboxes/imap-smtp-access/env", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccessEnv", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP server hosts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapSmtpAccessServers</returns>
        public ImapSmtpAccessServers GetImapSmtpAccessServers(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapSmtpAccessServers> localVarResponse = GetImapSmtpAccessServersWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP server hosts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapSmtpAccessServers</returns>
        public mailslurp.Client.ApiResponse<ImapSmtpAccessServers> GetImapSmtpAccessServersWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccessServers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ImapSmtpAccessServers>("/inboxes/imap-smtp-access/servers", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccessServers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get IMAP and SMTP server hosts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapSmtpAccessServers</returns>
        public async System.Threading.Tasks.Task<ImapSmtpAccessServers> GetImapSmtpAccessServersAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapSmtpAccessServers> localVarResponse = await GetImapSmtpAccessServersWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get IMAP and SMTP server hosts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapSmtpAccessServers)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapSmtpAccessServers>> GetImapSmtpAccessServersWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetImapSmtpAccessServers";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ImapSmtpAccessServers>("/inboxes/imap-smtp-access/servers", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetImapSmtpAccessServers", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get Inbox. Returns properties of an inbox. Returns an inbox&#39;s properties, including its email address and ID.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto GetInbox(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = GetInboxWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get Inbox. Returns properties of an inbox. Returns an inbox&#39;s properties, including its email address and ID.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> GetInboxWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxDto>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get Inbox. Returns properties of an inbox. Returns an inbox&#39;s properties, including its email address and ID.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> GetInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await GetInboxWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get Inbox. Returns properties of an inbox. Returns an inbox&#39;s properties, including its email address and ID.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> GetInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxDto>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search for an inbox with the provided email address Get a inbox result by email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxByEmailAddressResult</returns>
        public InboxByEmailAddressResult GetInboxByEmailAddress(string emailAddress, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxByEmailAddressResult> localVarResponse = GetInboxByEmailAddressWithHttpInfo(emailAddress);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search for an inbox with the provided email address Get a inbox result by email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxByEmailAddressResult</returns>
        public mailslurp.Client.ApiResponse<InboxByEmailAddressResult> GetInboxByEmailAddressWithHttpInfo(string emailAddress, int operationIndex = 0)
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->GetInboxByEmailAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxByEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxByEmailAddressResult>("/inboxes/byEmailAddress", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxByEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search for an inbox with the provided email address Get a inbox result by email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxByEmailAddressResult</returns>
        public async System.Threading.Tasks.Task<InboxByEmailAddressResult> GetInboxByEmailAddressAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxByEmailAddressResult> localVarResponse = await GetInboxByEmailAddressWithHttpInfoAsync(emailAddress, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search for an inbox with the provided email address Get a inbox result by email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxByEmailAddressResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxByEmailAddressResult>> GetInboxByEmailAddressWithHttpInfoAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->GetInboxByEmailAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxByEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxByEmailAddressResult>("/inboxes/byEmailAddress", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxByEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search for an inbox with the given name Get a inbox result by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxByNameResult</returns>
        public InboxByNameResult GetInboxByName(string name, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxByNameResult> localVarResponse = GetInboxByNameWithHttpInfo(name);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search for an inbox with the given name Get a inbox result by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxByNameResult</returns>
        public mailslurp.Client.ApiResponse<InboxByNameResult> GetInboxByNameWithHttpInfo(string name, int operationIndex = 0)
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling InboxControllerApi->GetInboxByName");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxByName";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxByNameResult>("/inboxes/byName", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxByName", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search for an inbox with the given name Get a inbox result by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxByNameResult</returns>
        public async System.Threading.Tasks.Task<InboxByNameResult> GetInboxByNameAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxByNameResult> localVarResponse = await GetInboxByNameWithHttpInfoAsync(name, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search for an inbox with the given name Get a inbox result by name
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxByNameResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxByNameResult>> GetInboxByNameWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling InboxControllerApi->GetInboxByName");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxByName";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxByNameResult>("/inboxes/byName", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxByName", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get total inbox count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        public CountDto GetInboxCount(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = GetInboxCountWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get total inbox count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        public mailslurp.Client.ApiResponse<CountDto> GetInboxCountWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<CountDto>("/inboxes/count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get total inbox count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        public async System.Threading.Tasks.Task<CountDto> GetInboxCountAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = await GetInboxCountWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get total inbox count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CountDto>> GetInboxCountWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<CountDto>("/inboxes/count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email count in inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        public CountDto GetInboxEmailCount(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = GetInboxEmailCountWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email count in inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        public mailslurp.Client.ApiResponse<CountDto> GetInboxEmailCountWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<CountDto>("/inboxes/{inboxId}/emails/count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email count in inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        public async System.Threading.Tasks.Task<CountDto> GetInboxEmailCountAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = await GetInboxEmailCountWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email count in inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CountDto>> GetInboxEmailCountWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<CountDto>("/inboxes/{inboxId}/emails/count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox emails paginated Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailPreview</returns>
        public PageEmailPreview GetInboxEmailsPaginated(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailPreview> localVarResponse = GetInboxEmailsPaginatedWithHttpInfo(inboxId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox emails paginated Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailPreview</returns>
        public mailslurp.Client.ApiResponse<PageEmailPreview> GetInboxEmailsPaginatedWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailPreview>("/inboxes/{inboxId}/emails/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox emails paginated Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailPreview</returns>
        public async System.Threading.Tasks.Task<PageEmailPreview> GetInboxEmailsPaginatedAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailPreview> localVarResponse = await GetInboxEmailsPaginatedWithHttpInfoAsync(inboxId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox emails paginated Get a paginated list of emails in an inbox. Does not hold connections open.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Id of inbox that emails belongs to</param>
        /// <param name="page">Optional page index in inbox emails list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox emails list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by received after given date time (optional)</param>
        /// <param name="before">Optional filter by received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailPreview)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailPreview>> GetInboxEmailsPaginatedWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailPreview>("/inboxes/{inboxId}/emails/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox IDs Get list of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxIdsResult</returns>
        [Obsolete]
        public InboxIdsResult GetInboxIds(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxIdsResult> localVarResponse = GetInboxIdsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox IDs Get list of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxIdsResult</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<InboxIdsResult> GetInboxIdsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxIds";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxIdsResult>("/inboxes/ids", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxIds", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox IDs Get list of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxIdsResult</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<InboxIdsResult> GetInboxIdsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxIdsResult> localVarResponse = await GetInboxIdsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox IDs Get list of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxIdsResult)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxIdsResult>> GetInboxIdsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxIds";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxIdsResult>("/inboxes/ids", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxIds", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get Inbox Sent Emails Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageSentEmailProjection</returns>
        [Obsolete]
        public PageSentEmailProjection GetInboxSentEmails(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = GetInboxSentEmailsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get Inbox Sent Emails Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageSentEmailProjection</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<PageSentEmailProjection> GetInboxSentEmailsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageSentEmailProjection>("/inboxes/{inboxId}/sent", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get Inbox Sent Emails Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageSentEmailProjection</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<PageSentEmailProjection> GetInboxSentEmailsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageSentEmailProjection> localVarResponse = await GetInboxSentEmailsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get Inbox Sent Emails Returns an inbox&#39;s sent email receipts. Call individual sent email endpoints for more details. Note for privacy reasons the full body of sent emails is never stored. An MD5 hash hex is available for comparison instead.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional sent email search (optional)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageSentEmailProjection)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageSentEmailProjection>> GetInboxSentEmailsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxSentEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageSentEmailProjection>("/inboxes/{inboxId}/sent", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxSentEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox tags Get all inbox tags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        [Obsolete]
        public List<string> GetInboxTags(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = GetInboxTagsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox tags Get all inbox tags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<List<string>> GetInboxTagsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxTags";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<string>>("/inboxes/tags", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxTags", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox tags Get all inbox tags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<List<string>> GetInboxTagsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = await GetInboxTagsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox tags Get all inbox tags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<string>>> GetInboxTagsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxTags";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<string>>("/inboxes/tags", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxTags", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Inboxes and email addresses List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;InboxDto&gt;</returns>
        [Obsolete]
        public List<InboxDto> GetInboxes(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<InboxDto>> localVarResponse = GetInboxesWithHttpInfo(size, sort, since, excludeCatchAllInboxes, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Inboxes and email addresses List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;InboxDto&gt;</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<List<InboxDto>> GetInboxesWithHttpInfo(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (excludeCatchAllInboxes != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "excludeCatchAllInboxes", excludeCatchAllInboxes));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<InboxDto>>("/inboxes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Inboxes and email addresses List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;InboxDto&gt;</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<List<InboxDto>> GetInboxesAsync(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<InboxDto>> localVarResponse = await GetInboxesWithHttpInfoAsync(size, sort, since, excludeCatchAllInboxes, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Inboxes and email addresses List the inboxes you have created. Note use of the more advanced &#x60;getAllInboxes&#x60; is recommended and allows paginated access using a limit and sort parameter.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="size">Optional result size limit. Note an automatic limit of 100 results is applied. See the paginated &#x60;getAllEmails&#x60; for larger queries. (optional, default to 100)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="excludeCatchAllInboxes">Optional exclude catch all inboxes (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;InboxDto&gt;)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<InboxDto>>> GetInboxesWithHttpInfoAsync(int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), bool? excludeCatchAllInboxes = default(bool?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (excludeCatchAllInboxes != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "excludeCatchAllInboxes", excludeCatchAllInboxes));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<InboxDto>>("/inboxes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in an inbox or wait for one to arrive
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email GetLatestEmailInInbox(Guid inboxId, long timeoutMillis, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = GetLatestEmailInInboxWithHttpInfo(inboxId, timeoutMillis);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in an inbox or wait for one to arrive
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> GetLatestEmailInInboxWithHttpInfo(Guid inboxId, long timeoutMillis, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeoutMillis", timeoutMillis));

            localVarRequestOptions.Operation = "InboxControllerApi.GetLatestEmailInInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/inboxes/getLatestEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmailInInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in an inbox or wait for one to arrive
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> GetLatestEmailInInboxAsync(Guid inboxId, long timeoutMillis, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await GetLatestEmailInInboxWithHttpInfoAsync(inboxId, timeoutMillis, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in an inbox or wait for one to arrive
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="timeoutMillis">Timeout milliseconds to wait for latest email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> GetLatestEmailInInboxWithHttpInfoAsync(Guid inboxId, long timeoutMillis, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "timeoutMillis", timeoutMillis));

            localVarRequestOptions.Operation = "InboxControllerApi.GetLatestEmailInInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/inboxes/getLatestEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmailInInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Organization Inboxes Paginated List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageOrganizationInboxProjection</returns>
        [Obsolete]
        public PageOrganizationInboxProjection GetOrganizationInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageOrganizationInboxProjection> localVarResponse = GetOrganizationInboxesWithHttpInfo(page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Organization Inboxes Paginated List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageOrganizationInboxProjection</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<PageOrganizationInboxProjection> GetOrganizationInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetOrganizationInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageOrganizationInboxProjection>("/inboxes/organization", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetOrganizationInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List Organization Inboxes Paginated List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageOrganizationInboxProjection</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<PageOrganizationInboxProjection> GetOrganizationInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageOrganizationInboxProjection> localVarResponse = await GetOrganizationInboxesWithHttpInfoAsync(page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List Organization Inboxes Paginated List organization inboxes in paginated form. These are inboxes created with &#x60;allowTeamAccess&#x60; flag enabled. Organization inboxes are &#x60;readOnly&#x60; for non-admin users. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageOrganizationInboxProjection)</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageOrganizationInboxProjection>> GetOrganizationInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetOrganizationInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageOrganizationInboxProjection>("/inboxes/organization", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetOrganizationInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a scheduled email job Get a scheduled email job details.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        public ScheduledJobDto GetScheduledJob(Guid jobId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = GetScheduledJobWithHttpInfo(jobId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a scheduled email job Get a scheduled email job details.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        public mailslurp.Client.ApiResponse<ScheduledJobDto> GetScheduledJobWithHttpInfo(Guid jobId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("jobId", mailslurp.Client.ClientUtils.ParameterToString(jobId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetScheduledJob";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ScheduledJobDto>("/inboxes/scheduled-jobs/{jobId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetScheduledJob", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a scheduled email job Get a scheduled email job details.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        public async System.Threading.Tasks.Task<ScheduledJobDto> GetScheduledJobAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = await GetScheduledJobWithHttpInfoAsync(jobId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a scheduled email job Get a scheduled email job details.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="jobId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ScheduledJobDto>> GetScheduledJobWithHttpInfoAsync(Guid jobId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("jobId", mailslurp.Client.ClientUtils.ParameterToString(jobId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.GetScheduledJob";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ScheduledJobDto>("/inboxes/scheduled-jobs/{jobId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetScheduledJob", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox Schedule sending of emails using scheduled jobs.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageScheduledJobs</returns>
        public PageScheduledJobs GetScheduledJobsByInboxId(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageScheduledJobs> localVarResponse = GetScheduledJobsByInboxIdWithHttpInfo(inboxId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox Schedule sending of emails using scheduled jobs.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageScheduledJobs</returns>
        public mailslurp.Client.ApiResponse<PageScheduledJobs> GetScheduledJobsByInboxIdWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetScheduledJobsByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageScheduledJobs>("/inboxes/{inboxId}/scheduled-jobs", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetScheduledJobsByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox Schedule sending of emails using scheduled jobs.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageScheduledJobs</returns>
        public async System.Threading.Tasks.Task<PageScheduledJobs> GetScheduledJobsByInboxIdAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageScheduledJobs> localVarResponse = await GetScheduledJobsByInboxIdWithHttpInfoAsync(inboxId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all scheduled email sending jobs for the inbox Schedule sending of emails using scheduled jobs.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in scheduled job list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in scheduled job list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageScheduledJobs)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageScheduledJobs>> GetScheduledJobsByInboxIdWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetScheduledJobsByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageScheduledJobs>("/inboxes/{inboxId}/scheduled-jobs", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetScheduledJobsByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SmtpAccessDetails</returns>
        public SmtpAccessDetails GetSmtpAccess(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SmtpAccessDetails> localVarResponse = GetSmtpAccessWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SmtpAccessDetails</returns>
        public mailslurp.Client.ApiResponse<SmtpAccessDetails> GetSmtpAccessWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<SmtpAccessDetails>("/inboxes/smtp-access", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SmtpAccessDetails</returns>
        public async System.Threading.Tasks.Task<SmtpAccessDetails> GetSmtpAccessAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SmtpAccessDetails> localVarResponse = await GetSmtpAccessWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SmtpAccessDetails)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SmtpAccessDetails>> GetSmtpAccessWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.GetSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<SmtpAccessDetails>("/inboxes/smtp-access", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Is email address available Returns whether an email address is available
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailAvailableResult</returns>
        public EmailAvailableResult IsEmailAddressAvailable(string emailAddress, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailAvailableResult> localVarResponse = IsEmailAddressAvailableWithHttpInfo(emailAddress);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Is email address available Returns whether an email address is available
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailAvailableResult</returns>
        public mailslurp.Client.ApiResponse<EmailAvailableResult> IsEmailAddressAvailableWithHttpInfo(string emailAddress, int operationIndex = 0)
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->IsEmailAddressAvailable");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "InboxControllerApi.IsEmailAddressAvailable";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmailAvailableResult>("/inboxes/available", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("IsEmailAddressAvailable", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Is email address available Returns whether an email address is available
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailAvailableResult</returns>
        public async System.Threading.Tasks.Task<EmailAvailableResult> IsEmailAddressAvailableAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailAvailableResult> localVarResponse = await IsEmailAddressAvailableWithHttpInfoAsync(emailAddress, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Is email address available Returns whether an email address is available
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailAvailableResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailAvailableResult>> IsEmailAddressAvailableWithHttpInfoAsync(string emailAddress, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling InboxControllerApi->IsEmailAddressAvailable");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));

            localVarRequestOptions.Operation = "InboxControllerApi.IsEmailAddressAvailable";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmailAvailableResult>("/inboxes/available", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("IsEmailAddressAvailable", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxRulesetDto</returns>
        public PageInboxRulesetDto ListInboxRulesets(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxRulesetDto> localVarResponse = ListInboxRulesetsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxRulesetDto</returns>
        public mailslurp.Client.ApiResponse<PageInboxRulesetDto> ListInboxRulesetsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.ListInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageInboxRulesetDto>("/inboxes/{inboxId}/rulesets", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ListInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxRulesetDto</returns>
        public async System.Threading.Tasks.Task<PageInboxRulesetDto> ListInboxRulesetsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxRulesetDto> localVarResponse = await ListInboxRulesetsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox rulesets List all rulesets attached to an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox ruleset list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox ruleset list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxRulesetDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxRulesetDto>> ListInboxRulesetsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.ListInboxRulesets";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageInboxRulesetDto>("/inboxes/{inboxId}/rulesets", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ListInboxRulesets", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox tracking pixels List all tracking pixels sent from an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageTrackingPixelProjection</returns>
        public PageTrackingPixelProjection ListInboxTrackingPixels(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = ListInboxTrackingPixelsWithHttpInfo(inboxId, page, size, sort, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox tracking pixels List all tracking pixels sent from an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageTrackingPixelProjection</returns>
        public mailslurp.Client.ApiResponse<PageTrackingPixelProjection> ListInboxTrackingPixelsWithHttpInfo(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.ListInboxTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageTrackingPixelProjection>("/inboxes/{inboxId}/tracking-pixels", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ListInboxTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List inbox tracking pixels List all tracking pixels sent from an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageTrackingPixelProjection</returns>
        public async System.Threading.Tasks.Task<PageTrackingPixelProjection> ListInboxTrackingPixelsAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageTrackingPixelProjection> localVarResponse = await ListInboxTrackingPixelsWithHttpInfoAsync(inboxId, page, size, sort, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List inbox tracking pixels List all tracking pixels sent from an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="page">Optional page index in inbox tracking pixel list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox tracking pixel list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Optional filter by created after given date time (optional)</param>
        /// <param name="before">Optional filter by created before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageTrackingPixelProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageTrackingPixelProjection>> ListInboxTrackingPixelsWithHttpInfoAsync(Guid inboxId, int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "InboxControllerApi.ListInboxTrackingPixels";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageTrackingPixelProjection>("/inboxes/{inboxId}/tracking-pixels", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ListInboxTrackingPixels", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search all inboxes and return matching inboxes Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageInboxProjection</returns>
        public PageInboxProjection SearchInboxes(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = SearchInboxesWithHttpInfo(searchInboxesOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search all inboxes and return matching inboxes Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageInboxProjection</returns>
        public mailslurp.Client.ApiResponse<PageInboxProjection> SearchInboxesWithHttpInfo(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0)
        {
            // verify the required parameter 'searchInboxesOptions' is set
            if (searchInboxesOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'searchInboxesOptions' when calling InboxControllerApi->SearchInboxes");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = searchInboxesOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SearchInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<PageInboxProjection>("/inboxes/search", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SearchInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search all inboxes and return matching inboxes Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageInboxProjection</returns>
        public async System.Threading.Tasks.Task<PageInboxProjection> SearchInboxesAsync(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageInboxProjection> localVarResponse = await SearchInboxesWithHttpInfoAsync(searchInboxesOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search all inboxes and return matching inboxes Search inboxes and return in paginated form. The results are available on the &#x60;content&#x60; property of the returned object. This method allows for page index (zero based), page size (how many results to return), and a sort direction (based on createdAt time). You Can also filter by whether an inbox is favorited or use email address pattern. This method is the recommended way to query inboxes. The alternative &#x60;getInboxes&#x60; method returns a full list of inboxes but is limited to 100 results.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchInboxesOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageInboxProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageInboxProjection>> SearchInboxesWithHttpInfoAsync(SearchInboxesOptions searchInboxesOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'searchInboxesOptions' is set
            if (searchInboxesOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'searchInboxesOptions' when calling InboxControllerApi->SearchInboxes");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = searchInboxesOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SearchInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<PageInboxProjection>("/inboxes/search", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SearchInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send Email Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendEmail(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            SendEmailWithHttpInfo(inboxId, sendEmailOptions);
        }

        /// <summary>
        /// Send Email Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendEmailWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send Email Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendEmailAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendEmailWithHttpInfoAsync(inboxId, sendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send Email Send an email from an inbox&#39;s email address.  The request body should contain the &#x60;SendEmailOptions&#x60; that include recipients, attachments, body etc. See &#x60;SendEmailOptions&#x60; for all available properties. Note the &#x60;inboxId&#x60; refers to the inbox&#39;s id not the inbox&#39;s email address. See https://www.mailslurp.com/guides/ for more information on how to send emails. This method does not return a sent email entity due to legacy reasons. To send and get a sent email as returned response use the sister method &#x60;sendEmailAndConfirm&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendEmailWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email and return sent confirmation Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto SendEmailAndConfirm(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = SendEmailAndConfirmWithHttpInfo(inboxId, sendEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email and return sent confirmation Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> SendEmailAndConfirmWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmailAndConfirm");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmailAndConfirm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SentEmailDto>("/inboxes/{inboxId}/confirm", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailAndConfirm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email and return sent confirmation Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> SendEmailAndConfirmAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await SendEmailAndConfirmWithHttpInfoAsync(inboxId, sendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email and return sent confirmation Sister method for standard &#x60;sendEmail&#x60; method with the benefit of returning a &#x60;SentEmail&#x60; entity confirming the successful sending of the email with a link to the sent object created for it.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> SendEmailAndConfirmWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmailAndConfirm");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmailAndConfirm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SentEmailDto>("/inboxes/{inboxId}/confirm", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailAndConfirm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email with queue Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendEmailWithQueue(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            SendEmailWithQueueWithHttpInfo(inboxId, validateBeforeEnqueue, sendEmailOptions);
        }

        /// <summary>
        /// Send email with queue Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendEmailWithQueueWithHttpInfo(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmailWithQueue");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "validateBeforeEnqueue", validateBeforeEnqueue));
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmailWithQueue";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/inboxes/{inboxId}/with-queue", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailWithQueue", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email with queue Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendEmailWithQueueAsync(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendEmailWithQueueWithHttpInfoAsync(inboxId, validateBeforeEnqueue, sendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send email with queue Send an email using a queue. Will place the email onto a queue that will then be processed and sent. Use this queue method to enable any failed email sending to be recovered. This will prevent lost emails when sending if your account encounters a block or payment issue.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendEmailWithQueueWithHttpInfoAsync(Guid inboxId, bool validateBeforeEnqueue, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendEmailWithQueue");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "validateBeforeEnqueue", validateBeforeEnqueue));
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendEmailWithQueue";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/inboxes/{inboxId}/with-queue", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailWithQueue", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto SendSmtpEnvelope(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = SendSmtpEnvelopeWithHttpInfo(inboxId, sendSMTPEnvelopeOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> SendSmtpEnvelopeWithHttpInfo(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendSMTPEnvelopeOptions' is set
            if (sendSMTPEnvelopeOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendSMTPEnvelopeOptions' when calling InboxControllerApi->SendSmtpEnvelope");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendSMTPEnvelopeOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendSmtpEnvelope";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SentEmailDto>("/inboxes/{inboxId}/smtp-envelope", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendSmtpEnvelope", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> SendSmtpEnvelopeAsync(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await SendSmtpEnvelopeWithHttpInfoAsync(inboxId, sendSMTPEnvelopeOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email using an SMTP mail envelope and message body and return sent confirmation Send email using an SMTP envelope containing RCPT TO, MAIL FROM, and a SMTP BODY.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendSMTPEnvelopeOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> SendSmtpEnvelopeWithHttpInfoAsync(Guid inboxId, SendSMTPEnvelopeOptions sendSMTPEnvelopeOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendSMTPEnvelopeOptions' is set
            if (sendSMTPEnvelopeOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendSMTPEnvelopeOptions' when calling InboxControllerApi->SendSmtpEnvelope");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = sendSMTPEnvelopeOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendSmtpEnvelope";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SentEmailDto>("/inboxes/{inboxId}/smtp-envelope", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendSmtpEnvelope", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send a test email to inbox Send an inbox a test email to test email receiving is working
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendTestEmail(Guid inboxId, int operationIndex = 0)
        {
            SendTestEmailWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Send a test email to inbox Send an inbox a test email to test email receiving is working
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendTestEmailWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.SendTestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/inboxes/{inboxId}/send-test-email", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendTestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send a test email to inbox Send an inbox a test email to test email receiving is working
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendTestEmailAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendTestEmailWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send a test email to inbox Send an inbox a test email to test email receiving is working
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendTestEmailWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "InboxControllerApi.SendTestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/inboxes/{inboxId}/send-test-email", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendTestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email with with delay or schedule Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ScheduledJobDto</returns>
        public ScheduledJobDto SendWithSchedule(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = SendWithScheduleWithHttpInfo(inboxId, sendEmailOptions, sendAtTimestamp, sendAtNowPlusSeconds, validateBeforeEnqueue);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email with with delay or schedule Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ScheduledJobDto</returns>
        public mailslurp.Client.ApiResponse<ScheduledJobDto> SendWithScheduleWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendWithSchedule");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (sendAtTimestamp != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sendAtTimestamp", sendAtTimestamp));
            }
            if (sendAtNowPlusSeconds != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sendAtNowPlusSeconds", sendAtNowPlusSeconds));
            }
            if (validateBeforeEnqueue != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "validateBeforeEnqueue", validateBeforeEnqueue));
            }
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendWithSchedule";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ScheduledJobDto>("/inboxes/{inboxId}/with-schedule", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendWithSchedule", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email with with delay or schedule Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ScheduledJobDto</returns>
        public async System.Threading.Tasks.Task<ScheduledJobDto> SendWithScheduleAsync(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ScheduledJobDto> localVarResponse = await SendWithScheduleWithHttpInfoAsync(inboxId, sendEmailOptions, sendAtTimestamp, sendAtNowPlusSeconds, validateBeforeEnqueue, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send email with with delay or schedule Send an email using a delay. Will place the email onto a scheduler that will then be processed and sent. Use delays to schedule email sending.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="sendAtTimestamp">Sending timestamp (optional)</param>
        /// <param name="sendAtNowPlusSeconds">Send after n seconds (optional)</param>
        /// <param name="validateBeforeEnqueue">Validate before adding to queue (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ScheduledJobDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ScheduledJobDto>> SendWithScheduleWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, DateTime? sendAtTimestamp = default(DateTime?), long? sendAtNowPlusSeconds = default(long?), bool? validateBeforeEnqueue = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling InboxControllerApi->SendWithSchedule");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            if (sendAtTimestamp != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sendAtTimestamp", sendAtTimestamp));
            }
            if (sendAtNowPlusSeconds != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sendAtNowPlusSeconds", sendAtNowPlusSeconds));
            }
            if (validateBeforeEnqueue != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "validateBeforeEnqueue", validateBeforeEnqueue));
            }
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SendWithSchedule";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ScheduledJobDto>("/inboxes/{inboxId}/with-schedule", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendWithSchedule", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Set inbox favourited state Set and return new favourite state for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto SetInboxFavourited(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = SetInboxFavouritedWithHttpInfo(inboxId, setInboxFavouritedOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Set inbox favourited state Set and return new favourite state for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> SetInboxFavouritedWithHttpInfo(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0)
        {
            // verify the required parameter 'setInboxFavouritedOptions' is set
            if (setInboxFavouritedOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'setInboxFavouritedOptions' when calling InboxControllerApi->SetInboxFavourited");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = setInboxFavouritedOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SetInboxFavourited";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<InboxDto>("/inboxes/{inboxId}/favourite", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SetInboxFavourited", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Set inbox favourited state Set and return new favourite state for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> SetInboxFavouritedAsync(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await SetInboxFavouritedWithHttpInfoAsync(inboxId, setInboxFavouritedOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Set inbox favourited state Set and return new favourite state for an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox to set favourite state</param>
        /// <param name="setInboxFavouritedOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> SetInboxFavouritedWithHttpInfoAsync(Guid inboxId, SetInboxFavouritedOptions setInboxFavouritedOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'setInboxFavouritedOptions' is set
            if (setInboxFavouritedOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'setInboxFavouritedOptions' when calling InboxControllerApi->SetInboxFavourited");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = setInboxFavouritedOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.SetInboxFavourited";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<InboxDto>("/inboxes/{inboxId}/favourite", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SetInboxFavourited", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void UpdateImapAccess(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            UpdateImapAccessWithHttpInfo(updateImapAccessOptions, inboxId);
        }

        /// <summary>
        ///  Update IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> UpdateImapAccessWithHttpInfo(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'updateImapAccessOptions' is set
            if (updateImapAccessOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateImapAccessOptions' when calling InboxControllerApi->UpdateImapAccess");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = updateImapAccessOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateImapAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<Object>("/inboxes/imap-access", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateImapAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task UpdateImapAccessAsync(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await UpdateImapAccessWithHttpInfoAsync(updateImapAccessOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        ///  Update IMAP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateImapAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> UpdateImapAccessWithHttpInfoAsync(UpdateImapAccessOptions updateImapAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateImapAccessOptions' is set
            if (updateImapAccessOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateImapAccessOptions' when calling InboxControllerApi->UpdateImapAccess");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = updateImapAccessOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateImapAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<Object>("/inboxes/imap-access", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateImapAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable. Update editable fields on an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto UpdateInbox(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = UpdateInboxWithHttpInfo(inboxId, updateInboxOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable. Update editable fields on an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> UpdateInboxWithHttpInfo(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0)
        {
            // verify the required parameter 'updateInboxOptions' is set
            if (updateInboxOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateInboxOptions' when calling InboxControllerApi->UpdateInbox");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = updateInboxOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<InboxDto>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable. Update editable fields on an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> UpdateInboxAsync(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await UpdateInboxWithHttpInfoAsync(inboxId, updateInboxOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update Inbox. Change name and description. Email address is not editable. Update editable fields on an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="updateInboxOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> UpdateInboxWithHttpInfoAsync(Guid inboxId, UpdateInboxOptions updateInboxOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateInboxOptions' is set
            if (updateInboxOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateInboxOptions' when calling InboxControllerApi->UpdateInbox");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter
            localVarRequestOptions.Data = updateInboxOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<InboxDto>("/inboxes/{inboxId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void UpdateSmtpAccess(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            UpdateSmtpAccessWithHttpInfo(updateSmtpAccessOptions, inboxId);
        }

        /// <summary>
        ///  Update SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> UpdateSmtpAccessWithHttpInfo(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'updateSmtpAccessOptions' is set
            if (updateSmtpAccessOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateSmtpAccessOptions' when calling InboxControllerApi->UpdateSmtpAccess");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = updateSmtpAccessOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<Object>("/inboxes/smtp-access", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task UpdateSmtpAccessAsync(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await UpdateSmtpAccessWithHttpInfoAsync(updateSmtpAccessOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        ///  Update SMTP access usernames and passwords
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="updateSmtpAccessOptions"></param>
        /// <param name="inboxId">Inbox ID (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> UpdateSmtpAccessWithHttpInfoAsync(UpdateSmtpAccessOptions updateSmtpAccessOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateSmtpAccessOptions' is set
            if (updateSmtpAccessOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateSmtpAccessOptions' when calling InboxControllerApi->UpdateSmtpAccess");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = updateSmtpAccessOptions;

            localVarRequestOptions.Operation = "InboxControllerApi.UpdateSmtpAccess";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<Object>("/inboxes/smtp-access", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateSmtpAccess", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ImapControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IImapControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Fetch message in an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerFetchResult</returns>
        ImapServerFetchResult ImapServerFetch(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Fetch message in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerFetchResult</returns>
        ApiResponse<ImapServerFetchResult> ImapServerFetchWithHttpInfo(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get a message by email ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerGetResult</returns>
        ImapServerGetResult ImapServerGet(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get a message by email ID
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerGetResult</returns>
        ApiResponse<ImapServerGetResult> ImapServerGetWithHttpInfo(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// List messages in an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerListResult</returns>
        ImapServerListResult ImapServerList(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// List messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerListResult</returns>
        ApiResponse<ImapServerListResult> ImapServerListWithHttpInfo(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Create a new mailbox if possible
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerMailboxResult</returns>
        ImapServerMailboxResult ImapServerMailbox(string name, int operationIndex = 0);

        /// <summary>
        /// Create a new mailbox if possible
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerMailboxResult</returns>
        ApiResponse<ImapServerMailboxResult> ImapServerMailboxWithHttpInfo(string name, int operationIndex = 0);
        /// <summary>
        /// Search messages in an inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerSearchResult</returns>
        ImapServerSearchResult ImapServerSearch(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Search messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerSearchResult</returns>
        ApiResponse<ImapServerSearchResult> ImapServerSearchWithHttpInfo(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get status for mailbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerStatusResult</returns>
        ImapServerStatusResult ImapServerStatus(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get status for mailbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerStatusResult</returns>
        ApiResponse<ImapServerStatusResult> ImapServerStatusWithHttpInfo(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update message flags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void ImapServerUpdateFlags(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update message flags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> ImapServerUpdateFlagsWithHttpInfo(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IImapControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Fetch message in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerFetchResult</returns>
        System.Threading.Tasks.Task<ImapServerFetchResult> ImapServerFetchAsync(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Fetch message in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerFetchResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerFetchResult>> ImapServerFetchWithHttpInfoAsync(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a message by email ID
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerGetResult</returns>
        System.Threading.Tasks.Task<ImapServerGetResult> ImapServerGetAsync(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a message by email ID
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerGetResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerGetResult>> ImapServerGetWithHttpInfoAsync(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerListResult</returns>
        System.Threading.Tasks.Task<ImapServerListResult> ImapServerListAsync(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerListResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerListResult>> ImapServerListWithHttpInfoAsync(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a new mailbox if possible
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerMailboxResult</returns>
        System.Threading.Tasks.Task<ImapServerMailboxResult> ImapServerMailboxAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a new mailbox if possible
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerMailboxResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerMailboxResult>> ImapServerMailboxWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Search messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerSearchResult</returns>
        System.Threading.Tasks.Task<ImapServerSearchResult> ImapServerSearchAsync(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Search messages in an inbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerSearchResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerSearchResult>> ImapServerSearchWithHttpInfoAsync(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get status for mailbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerStatusResult</returns>
        System.Threading.Tasks.Task<ImapServerStatusResult> ImapServerStatusAsync(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get status for mailbox
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerStatusResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ImapServerStatusResult>> ImapServerStatusWithHttpInfoAsync(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update message flags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task ImapServerUpdateFlagsAsync(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Update message flags
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> ImapServerUpdateFlagsWithHttpInfoAsync(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IImapControllerApi : IImapControllerApiSync, IImapControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ImapControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ImapControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ImapControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ImapControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ImapControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ImapControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ImapControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ImapControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Fetch message in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerFetchResult</returns>
        public ImapServerFetchResult ImapServerFetch(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerFetchResult> localVarResponse = ImapServerFetchWithHttpInfo(seqNum, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Fetch message in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerFetchResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerFetchResult> ImapServerFetchWithHttpInfo(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "seqNum", seqNum));

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerFetch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerFetchResult>("/imap/server/fetch", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerFetch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Fetch message in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerFetchResult</returns>
        public async System.Threading.Tasks.Task<ImapServerFetchResult> ImapServerFetchAsync(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerFetchResult> localVarResponse = await ImapServerFetchWithHttpInfoAsync(seqNum, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Fetch message in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="seqNum"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerFetchResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerFetchResult>> ImapServerFetchWithHttpInfoAsync(long seqNum, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "seqNum", seqNum));

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerFetch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerFetchResult>("/imap/server/fetch", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerFetch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a message by email ID 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerGetResult</returns>
        public ImapServerGetResult ImapServerGet(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerGetResult> localVarResponse = ImapServerGetWithHttpInfo(emailId, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a message by email ID 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerGetResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerGetResult> ImapServerGetWithHttpInfo(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerGet";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerGetResult>("/imap/server/get", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerGet", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a message by email ID 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerGetResult</returns>
        public async System.Threading.Tasks.Task<ImapServerGetResult> ImapServerGetAsync(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerGetResult> localVarResponse = await ImapServerGetWithHttpInfoAsync(emailId, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a message by email ID 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">Email ID to get</param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerGetResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerGetResult>> ImapServerGetWithHttpInfoAsync(Guid emailId, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailId", emailId));
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerGet";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerGetResult>("/imap/server/get", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerGet", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerListResult</returns>
        public ImapServerListResult ImapServerList(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerListResult> localVarResponse = ImapServerListWithHttpInfo(imapServerListOptions, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerListResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerListResult> ImapServerListWithHttpInfo(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'imapServerListOptions' is set
            if (imapServerListOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerListOptions' when calling ImapControllerApi->ImapServerList");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerListOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerList";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerListResult>("/imap/server/list", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerList", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerListResult</returns>
        public async System.Threading.Tasks.Task<ImapServerListResult> ImapServerListAsync(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerListResult> localVarResponse = await ImapServerListWithHttpInfoAsync(imapServerListOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerListOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerListResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerListResult>> ImapServerListWithHttpInfoAsync(ImapServerListOptions imapServerListOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'imapServerListOptions' is set
            if (imapServerListOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerListOptions' when calling ImapControllerApi->ImapServerList");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerListOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerList";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerListResult>("/imap/server/list", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerList", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a new mailbox if possible 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerMailboxResult</returns>
        public ImapServerMailboxResult ImapServerMailbox(string name, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerMailboxResult> localVarResponse = ImapServerMailboxWithHttpInfo(name);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a new mailbox if possible 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerMailboxResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerMailboxResult> ImapServerMailboxWithHttpInfo(string name, int operationIndex = 0)
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling ImapControllerApi->ImapServerMailbox");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerMailbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerMailboxResult>("/imap/server/mailbox", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerMailbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a new mailbox if possible 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerMailboxResult</returns>
        public async System.Threading.Tasks.Task<ImapServerMailboxResult> ImapServerMailboxAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerMailboxResult> localVarResponse = await ImapServerMailboxWithHttpInfoAsync(name, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a new mailbox if possible 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="name">Inbox email address to create</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerMailboxResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerMailboxResult>> ImapServerMailboxWithHttpInfoAsync(string name, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'name' is set
            if (name == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'name' when calling ImapControllerApi->ImapServerMailbox");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerMailbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerMailboxResult>("/imap/server/mailbox", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerMailbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerSearchResult</returns>
        public ImapServerSearchResult ImapServerSearch(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerSearchResult> localVarResponse = ImapServerSearchWithHttpInfo(imapServerSearchOptions, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerSearchResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerSearchResult> ImapServerSearchWithHttpInfo(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'imapServerSearchOptions' is set
            if (imapServerSearchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerSearchOptions' when calling ImapControllerApi->ImapServerSearch");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerSearchOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerSearch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerSearchResult>("/imap/server/search", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerSearch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Search messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerSearchResult</returns>
        public async System.Threading.Tasks.Task<ImapServerSearchResult> ImapServerSearchAsync(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerSearchResult> localVarResponse = await ImapServerSearchWithHttpInfoAsync(imapServerSearchOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Search messages in an inbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerSearchOptions"></param>
        /// <param name="inboxId">Inbox ID to search (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerSearchResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerSearchResult>> ImapServerSearchWithHttpInfoAsync(ImapServerSearchOptions imapServerSearchOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'imapServerSearchOptions' is set
            if (imapServerSearchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerSearchOptions' when calling ImapControllerApi->ImapServerSearch");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerSearchOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerSearch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerSearchResult>("/imap/server/search", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerSearch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get status for mailbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ImapServerStatusResult</returns>
        public ImapServerStatusResult ImapServerStatus(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ImapServerStatusResult> localVarResponse = ImapServerStatusWithHttpInfo(imapServerStatusOptions, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get status for mailbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ImapServerStatusResult</returns>
        public mailslurp.Client.ApiResponse<ImapServerStatusResult> ImapServerStatusWithHttpInfo(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'imapServerStatusOptions' is set
            if (imapServerStatusOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerStatusOptions' when calling ImapControllerApi->ImapServerStatus");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerStatusOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ImapServerStatusResult>("/imap/server/status", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get status for mailbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ImapServerStatusResult</returns>
        public async System.Threading.Tasks.Task<ImapServerStatusResult> ImapServerStatusAsync(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ImapServerStatusResult> localVarResponse = await ImapServerStatusWithHttpInfoAsync(imapServerStatusOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get status for mailbox 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapServerStatusOptions"></param>
        /// <param name="inboxId">Inbox ID to list (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ImapServerStatusResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ImapServerStatusResult>> ImapServerStatusWithHttpInfoAsync(ImapServerStatusOptions imapServerStatusOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'imapServerStatusOptions' is set
            if (imapServerStatusOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapServerStatusOptions' when calling ImapControllerApi->ImapServerStatus");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapServerStatusOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ImapServerStatusResult>("/imap/server/status", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update message flags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void ImapServerUpdateFlags(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            ImapServerUpdateFlagsWithHttpInfo(imapUpdateFlagsOptions, inboxId);
        }

        /// <summary>
        ///  Update message flags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> ImapServerUpdateFlagsWithHttpInfo(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            // verify the required parameter 'imapUpdateFlagsOptions' is set
            if (imapUpdateFlagsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapUpdateFlagsOptions' when calling ImapControllerApi->ImapServerUpdateFlags");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapUpdateFlagsOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerUpdateFlags";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/imap/server/update-flags", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerUpdateFlags", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Update message flags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task ImapServerUpdateFlagsAsync(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await ImapServerUpdateFlagsWithHttpInfoAsync(imapUpdateFlagsOptions, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        ///  Update message flags
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="imapUpdateFlagsOptions"></param>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> ImapServerUpdateFlagsWithHttpInfoAsync(ImapUpdateFlagsOptions imapUpdateFlagsOptions, Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'imapUpdateFlagsOptions' is set
            if (imapUpdateFlagsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapUpdateFlagsOptions' when calling ImapControllerApi->ImapServerUpdateFlags");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            localVarRequestOptions.Data = imapUpdateFlagsOptions;

            localVarRequestOptions.Operation = "ImapControllerApi.ImapServerUpdateFlags";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/imap/server/update-flags", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ImapServerUpdateFlags", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/GroupControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IGroupControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Add contacts to a group
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        GroupContactsDto AddContactsToGroup(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0);

        /// <summary>
        /// Add contacts to a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        ApiResponse<GroupContactsDto> AddContactsToGroupWithHttpInfo(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0);
        /// <summary>
        /// Create a group
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupDto</returns>
        GroupDto CreateGroup(CreateGroupOptions createGroupOptions, int operationIndex = 0);

        /// <summary>
        /// Create a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupDto</returns>
        ApiResponse<GroupDto> CreateGroupWithHttpInfo(CreateGroupOptions createGroupOptions, int operationIndex = 0);
        /// <summary>
        /// Delete group
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteGroup(Guid groupId, int operationIndex = 0);

        /// <summary>
        /// Delete group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteGroupWithHttpInfo(Guid groupId, int operationIndex = 0);
        /// <summary>
        /// Get all Contact Groups in paginated format
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageGroupProjection</returns>
        PageGroupProjection GetAllGroups(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all Contact Groups in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageGroupProjection</returns>
        ApiResponse<PageGroupProjection> GetAllGroupsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get group
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupDto</returns>
        GroupDto GetGroup(Guid groupId, int operationIndex = 0);

        /// <summary>
        /// Get group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupDto</returns>
        ApiResponse<GroupDto> GetGroupWithHttpInfo(Guid groupId, int operationIndex = 0);
        /// <summary>
        /// Get group and contacts belonging to it
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        GroupContactsDto GetGroupWithContacts(Guid groupId, int operationIndex = 0);

        /// <summary>
        /// Get group and contacts belonging to it
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        ApiResponse<GroupContactsDto> GetGroupWithContactsWithHttpInfo(Guid groupId, int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get group and paginated contacts belonging to it
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageContactProjection</returns>
        PageContactProjection GetGroupWithContactsPaginated(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get group and paginated contacts belonging to it
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageContactProjection</returns>
        ApiResponse<PageContactProjection> GetGroupWithContactsPaginatedWithHttpInfo(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get all groups
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;GroupProjection&gt;</returns>
        List<GroupProjection> GetGroups(int operationIndex = 0);

        /// <summary>
        /// Get all groups
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;GroupProjection&gt;</returns>
        ApiResponse<List<GroupProjection>> GetGroupsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Remove contacts from a group
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        GroupContactsDto RemoveContactsFromGroup(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0);

        /// <summary>
        /// Remove contacts from a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        ApiResponse<GroupContactsDto> RemoveContactsFromGroupWithHttpInfo(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IGroupControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Add contacts to a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        System.Threading.Tasks.Task<GroupContactsDto> AddContactsToGroupAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Add contacts to a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<GroupContactsDto>> AddContactsToGroupWithHttpInfoAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupDto</returns>
        System.Threading.Tasks.Task<GroupDto> CreateGroupAsync(CreateGroupOptions createGroupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<GroupDto>> CreateGroupWithHttpInfoAsync(CreateGroupOptions createGroupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteGroupAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteGroupWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all Contact Groups in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageGroupProjection</returns>
        System.Threading.Tasks.Task<PageGroupProjection> GetAllGroupsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all Contact Groups in paginated format
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageGroupProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageGroupProjection>> GetAllGroupsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupDto</returns>
        System.Threading.Tasks.Task<GroupDto> GetGroupAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<GroupDto>> GetGroupWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get group and contacts belonging to it
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        System.Threading.Tasks.Task<GroupContactsDto> GetGroupWithContactsAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get group and contacts belonging to it
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<GroupContactsDto>> GetGroupWithContactsWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get group and paginated contacts belonging to it
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageContactProjection</returns>
        System.Threading.Tasks.Task<PageContactProjection> GetGroupWithContactsPaginatedAsync(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get group and paginated contacts belonging to it
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageContactProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageContactProjection>> GetGroupWithContactsPaginatedWithHttpInfoAsync(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all groups
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;GroupProjection&gt;</returns>
        System.Threading.Tasks.Task<List<GroupProjection>> GetGroupsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all groups
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;GroupProjection&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<GroupProjection>>> GetGroupsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Remove contacts from a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        System.Threading.Tasks.Task<GroupContactsDto> RemoveContactsFromGroupAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Remove contacts from a group
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<GroupContactsDto>> RemoveContactsFromGroupWithHttpInfoAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IGroupControllerApi : IGroupControllerApiSync, IGroupControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="GroupControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public GroupControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="GroupControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public GroupControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="GroupControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public GroupControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="GroupControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public GroupControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Add contacts to a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        public GroupContactsDto AddContactsToGroup(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = AddContactsToGroupWithHttpInfo(groupId, updateGroupContacts);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Add contacts to a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        public mailslurp.Client.ApiResponse<GroupContactsDto> AddContactsToGroupWithHttpInfo(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0)
        {
            // verify the required parameter 'updateGroupContacts' is set
            if (updateGroupContacts == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateGroupContacts' when calling GroupControllerApi->AddContactsToGroup");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            localVarRequestOptions.Data = updateGroupContacts;

            localVarRequestOptions.Operation = "GroupControllerApi.AddContactsToGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("AddContactsToGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Add contacts to a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        public async System.Threading.Tasks.Task<GroupContactsDto> AddContactsToGroupAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = await AddContactsToGroupWithHttpInfoAsync(groupId, updateGroupContacts, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Add contacts to a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GroupContactsDto>> AddContactsToGroupWithHttpInfoAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateGroupContacts' is set
            if (updateGroupContacts == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateGroupContacts' when calling GroupControllerApi->AddContactsToGroup");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            localVarRequestOptions.Data = updateGroupContacts;

            localVarRequestOptions.Operation = "GroupControllerApi.AddContactsToGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("AddContactsToGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupDto</returns>
        public GroupDto CreateGroup(CreateGroupOptions createGroupOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GroupDto> localVarResponse = CreateGroupWithHttpInfo(createGroupOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupDto</returns>
        public mailslurp.Client.ApiResponse<GroupDto> CreateGroupWithHttpInfo(CreateGroupOptions createGroupOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createGroupOptions' is set
            if (createGroupOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createGroupOptions' when calling GroupControllerApi->CreateGroup");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createGroupOptions;

            localVarRequestOptions.Operation = "GroupControllerApi.CreateGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<GroupDto>("/groups", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupDto</returns>
        public async System.Threading.Tasks.Task<GroupDto> CreateGroupAsync(CreateGroupOptions createGroupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GroupDto> localVarResponse = await CreateGroupWithHttpInfoAsync(createGroupOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createGroupOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GroupDto>> CreateGroupWithHttpInfoAsync(CreateGroupOptions createGroupOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createGroupOptions' is set
            if (createGroupOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createGroupOptions' when calling GroupControllerApi->CreateGroup");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createGroupOptions;

            localVarRequestOptions.Operation = "GroupControllerApi.CreateGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<GroupDto>("/groups", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteGroup(Guid groupId, int operationIndex = 0)
        {
            DeleteGroupWithHttpInfo(groupId);
        }

        /// <summary>
        /// Delete group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteGroupWithHttpInfo(Guid groupId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.DeleteGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/groups/{groupId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteGroupAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteGroupWithHttpInfoAsync(groupId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteGroupWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.DeleteGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/groups/{groupId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all Contact Groups in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageGroupProjection</returns>
        public PageGroupProjection GetAllGroups(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageGroupProjection> localVarResponse = GetAllGroupsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all Contact Groups in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageGroupProjection</returns>
        public mailslurp.Client.ApiResponse<PageGroupProjection> GetAllGroupsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "GroupControllerApi.GetAllGroups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageGroupProjection>("/groups/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllGroups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all Contact Groups in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageGroupProjection</returns>
        public async System.Threading.Tasks.Task<PageGroupProjection> GetAllGroupsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageGroupProjection> localVarResponse = await GetAllGroupsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all Contact Groups in paginated format 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageGroupProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageGroupProjection>> GetAllGroupsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "GroupControllerApi.GetAllGroups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageGroupProjection>("/groups/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllGroups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupDto</returns>
        public GroupDto GetGroup(Guid groupId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GroupDto> localVarResponse = GetGroupWithHttpInfo(groupId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupDto</returns>
        public mailslurp.Client.ApiResponse<GroupDto> GetGroupWithHttpInfo(Guid groupId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<GroupDto>("/groups/{groupId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupDto</returns>
        public async System.Threading.Tasks.Task<GroupDto> GetGroupAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GroupDto> localVarResponse = await GetGroupWithHttpInfoAsync(groupId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GroupDto>> GetGroupWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<GroupDto>("/groups/{groupId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get group and contacts belonging to it 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        public GroupContactsDto GetGroupWithContacts(Guid groupId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = GetGroupWithContactsWithHttpInfo(groupId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get group and contacts belonging to it 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        public mailslurp.Client.ApiResponse<GroupContactsDto> GetGroupWithContactsWithHttpInfo(Guid groupId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroupWithContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroupWithContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get group and contacts belonging to it 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        public async System.Threading.Tasks.Task<GroupContactsDto> GetGroupWithContactsAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = await GetGroupWithContactsWithHttpInfoAsync(groupId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get group and contacts belonging to it 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GroupContactsDto>> GetGroupWithContactsWithHttpInfoAsync(Guid groupId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroupWithContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroupWithContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get group and paginated contacts belonging to it
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageContactProjection</returns>
        public PageContactProjection GetGroupWithContactsPaginated(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageContactProjection> localVarResponse = GetGroupWithContactsPaginatedWithHttpInfo(groupId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get group and paginated contacts belonging to it
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageContactProjection</returns>
        public mailslurp.Client.ApiResponse<PageContactProjection> GetGroupWithContactsPaginatedWithHttpInfo(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroupWithContactsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageContactProjection>("/groups/{groupId}/contacts-paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroupWithContactsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get group and paginated contacts belonging to it
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageContactProjection</returns>
        public async System.Threading.Tasks.Task<PageContactProjection> GetGroupWithContactsPaginatedAsync(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageContactProjection> localVarResponse = await GetGroupWithContactsPaginatedWithHttpInfoAsync(groupId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get group and paginated contacts belonging to it
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="page">Optional page index in group contact pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in group contact pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageContactProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageContactProjection>> GetGroupWithContactsPaginatedWithHttpInfoAsync(Guid groupId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "GroupControllerApi.GetGroupWithContactsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageContactProjection>("/groups/{groupId}/contacts-paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroupWithContactsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all groups 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;GroupProjection&gt;</returns>
        public List<GroupProjection> GetGroups(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<GroupProjection>> localVarResponse = GetGroupsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all groups 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;GroupProjection&gt;</returns>
        public mailslurp.Client.ApiResponse<List<GroupProjection>> GetGroupsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "GroupControllerApi.GetGroups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<GroupProjection>>("/groups", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all groups 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;GroupProjection&gt;</returns>
        public async System.Threading.Tasks.Task<List<GroupProjection>> GetGroupsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<GroupProjection>> localVarResponse = await GetGroupsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all groups 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;GroupProjection&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<GroupProjection>>> GetGroupsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "GroupControllerApi.GetGroups";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<GroupProjection>>("/groups", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGroups", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Remove contacts from a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GroupContactsDto</returns>
        public GroupContactsDto RemoveContactsFromGroup(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = RemoveContactsFromGroupWithHttpInfo(groupId, updateGroupContacts);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Remove contacts from a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GroupContactsDto</returns>
        public mailslurp.Client.ApiResponse<GroupContactsDto> RemoveContactsFromGroupWithHttpInfo(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0)
        {
            // verify the required parameter 'updateGroupContacts' is set
            if (updateGroupContacts == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateGroupContacts' when calling GroupControllerApi->RemoveContactsFromGroup");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            localVarRequestOptions.Data = updateGroupContacts;

            localVarRequestOptions.Operation = "GroupControllerApi.RemoveContactsFromGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RemoveContactsFromGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Remove contacts from a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GroupContactsDto</returns>
        public async System.Threading.Tasks.Task<GroupContactsDto> RemoveContactsFromGroupAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GroupContactsDto> localVarResponse = await RemoveContactsFromGroupWithHttpInfoAsync(groupId, updateGroupContacts, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Remove contacts from a group 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="groupId"></param>
        /// <param name="updateGroupContacts"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GroupContactsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GroupContactsDto>> RemoveContactsFromGroupWithHttpInfoAsync(Guid groupId, UpdateGroupContacts updateGroupContacts, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateGroupContacts' is set
            if (updateGroupContacts == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateGroupContacts' when calling GroupControllerApi->RemoveContactsFromGroup");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("groupId", mailslurp.Client.ClientUtils.ParameterToString(groupId)); // path parameter
            localVarRequestOptions.Data = updateGroupContacts;

            localVarRequestOptions.Operation = "GroupControllerApi.RemoveContactsFromGroup";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<GroupContactsDto>("/groups/{groupId}/contacts", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("RemoveContactsFromGroup", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/FormControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IFormControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields
        /// </summary>
        /// <remarks>
        /// This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string SubmitForm(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0);

        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields
        /// </summary>
        /// <remarks>
        /// This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> SubmitFormWithHttpInfo(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IFormControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields
        /// </summary>
        /// <remarks>
        /// This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> SubmitFormAsync(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields
        /// </summary>
        /// <remarks>
        /// This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> SubmitFormWithHttpInfoAsync(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IFormControllerApi : IFormControllerApiSync, IFormControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="FormControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public FormControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="FormControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public FormControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="FormControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public FormControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="FormControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public FormControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string SubmitForm(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = SubmitFormWithHttpInfo(to, subject, redirectTo, emailAddress, successMessage, spamCheck, otherParameters);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> SubmitFormWithHttpInfo(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (to != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_to", to));
            }
            if (subject != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_subject", subject));
            }
            if (redirectTo != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_redirectTo", redirectTo));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_emailAddress", emailAddress));
            }
            if (successMessage != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_successMessage", successMessage));
            }
            if (spamCheck != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_spamCheck", spamCheck));
            }
            if (otherParameters != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "otherParameters", otherParameters));
            }

            localVarRequestOptions.Operation = "FormControllerApi.SubmitForm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<string>("/forms", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SubmitForm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> SubmitFormAsync(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await SubmitFormWithHttpInfoAsync(to, subject, redirectTo, emailAddress, successMessage, spamCheck, otherParameters, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Submit a form to be parsed and sent as an email to an address determined by the form fields This endpoint allows you to submit HTML forms and receive the field values and files via email.   #### Parameters The endpoint looks for special meta parameters in the form fields OR in the URL request parameters. The meta parameters can be used to specify the behaviour of the email.   You must provide at-least a &#x60;_to&#x60; email address to tell the endpoint where the form should be emailed. These can be submitted as hidden HTML input fields with the corresponding &#x60;name&#x60; attributes or as URL query parameters such as &#x60;?_to&#x3D;test@example.com&#x60;  The endpoint takes all other form fields that are named and includes them in the message body of the email. Files are sent as attachments.  #### Submitting This endpoint accepts form submission via POST method. It accepts &#x60;application/x-www-form-urlencoded&#x60;, and &#x60;multipart/form-data&#x60; content-types.  #### HTML Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;input name&#x3D;\&quot;_to\&quot; type&#x3D;\&quot;hidden\&quot; value&#x3D;\&quot;test@example.com\&quot;/&gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;  #### URL Example &#x60;&#x60;&#x60;html &lt;form    action&#x3D;\&quot;https://csharp.api.mailslurp.com/forms?_to&#x3D;test@example.com\&quot;   method&#x3D;\&quot;post\&quot; &gt;   &lt;textarea name&#x3D;\&quot;feedback\&quot;&gt;&lt;/textarea&gt;   &lt;button type&#x3D;\&quot;submit\&quot;&gt;Submit&lt;/button&gt; &lt;/form&gt; &#x60;&#x60;&#x60;    The email address is specified by a &#x60;_to&#x60; field OR is extracted from an email alias specified by a &#x60;_toAlias&#x60; field (see the alias controller for more information).  Endpoint accepts .  You can specify a content type in HTML forms using the &#x60;enctype&#x60; attribute, for instance: &#x60;&lt;form enctype&#x3D;\&quot;multipart/form-data\&quot;&gt;&#x60;.  
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">The email address that submitted form should be sent to. (optional)</param>
        /// <param name="subject">Optional subject of the email that will be sent. (optional)</param>
        /// <param name="redirectTo">Optional URL to redirect form submitter to after submission. If not present user will see a success message. (optional)</param>
        /// <param name="emailAddress">Email address of the submitting user. Include this if you wish to record the submitters email address and reply to it later. (optional)</param>
        /// <param name="successMessage">Optional success message to display if no _redirectTo present. (optional)</param>
        /// <param name="spamCheck">Optional but recommended field that catches spammers out. Include as a hidden form field but LEAVE EMPTY. Spam-bots will usually fill every field. If the _spamCheck field is filled the form submission will be ignored. (optional)</param>
        /// <param name="otherParameters">All other parameters or fields will be accepted and attached to the sent email. This includes files and any HTML form field with a name. These fields will become the body of the email that is sent. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> SubmitFormWithHttpInfoAsync(string to = default(string), string subject = default(string), string redirectTo = default(string), string emailAddress = default(string), string successMessage = default(string), string spamCheck = default(string), string otherParameters = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (to != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_to", to));
            }
            if (subject != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_subject", subject));
            }
            if (redirectTo != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_redirectTo", redirectTo));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_emailAddress", emailAddress));
            }
            if (successMessage != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_successMessage", successMessage));
            }
            if (spamCheck != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "_spamCheck", spamCheck));
            }
            if (otherParameters != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "otherParameters", otherParameters));
            }

            localVarRequestOptions.Operation = "FormControllerApi.SubmitForm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<string>("/forms", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SubmitForm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ExportControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExportControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Export inboxes link callable via browser
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        byte[] ExportEntities(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Export inboxes link callable via browser
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        ApiResponse<byte[]> ExportEntitiesWithHttpInfo(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get export link
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExportLink</returns>
        ExportLink GetExportLink(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0);

        /// <summary>
        /// Get export link
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExportLink</returns>
        ApiResponse<ExportLink> GetExportLinkWithHttpInfo(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExportControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Export inboxes link callable via browser
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        System.Threading.Tasks.Task<byte[]> ExportEntitiesAsync(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Export inboxes link callable via browser
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        System.Threading.Tasks.Task<ApiResponse<byte[]>> ExportEntitiesWithHttpInfoAsync(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get export link
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExportLink</returns>
        System.Threading.Tasks.Task<ExportLink> GetExportLinkAsync(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get export link
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExportLink)</returns>
        System.Threading.Tasks.Task<ApiResponse<ExportLink>> GetExportLinkWithHttpInfoAsync(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExportControllerApi : IExportControllerApiSync, IExportControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ExportControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ExportControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExportControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ExportControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExportControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ExportControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExportControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ExportControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Export inboxes link callable via browser 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        public byte[] ExportEntities(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = ExportEntitiesWithHttpInfo(exportType, apiKey, outputFormat, filter, listSeparatorToken, excludePreviouslyExported, createdEarliestTime, createdOldestTime);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Export inboxes link callable via browser 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        public mailslurp.Client.ApiResponse<byte[]> ExportEntitiesWithHttpInfo(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0)
        {
            // verify the required parameter 'exportType' is set
            if (exportType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportType' when calling ExportControllerApi->ExportEntities");
            }

            // verify the required parameter 'apiKey' is set
            if (apiKey == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'apiKey' when calling ExportControllerApi->ExportEntities");
            }

            // verify the required parameter 'outputFormat' is set
            if (outputFormat == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'outputFormat' when calling ExportControllerApi->ExportEntities");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "exportType", exportType));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "outputFormat", outputFormat));
            if (filter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filter", filter));
            }
            if (listSeparatorToken != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "listSeparatorToken", listSeparatorToken));
            }
            if (excludePreviouslyExported != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "excludePreviouslyExported", excludePreviouslyExported));
            }
            if (createdEarliestTime != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "createdEarliestTime", createdEarliestTime));
            }
            if (createdOldestTime != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "createdOldestTime", createdOldestTime));
            }

            localVarRequestOptions.Operation = "ExportControllerApi.ExportEntities";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<byte[]>("/export", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ExportEntities", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Export inboxes link callable via browser 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        public async System.Threading.Tasks.Task<byte[]> ExportEntitiesAsync(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = await ExportEntitiesWithHttpInfoAsync(exportType, apiKey, outputFormat, filter, listSeparatorToken, excludePreviouslyExported, createdEarliestTime, createdOldestTime, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Export inboxes link callable via browser 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="apiKey"></param>
        /// <param name="outputFormat"></param>
        /// <param name="filter"> (optional)</param>
        /// <param name="listSeparatorToken"> (optional)</param>
        /// <param name="excludePreviouslyExported"> (optional)</param>
        /// <param name="createdEarliestTime"> (optional)</param>
        /// <param name="createdOldestTime"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<byte[]>> ExportEntitiesWithHttpInfoAsync(string exportType, string apiKey, string outputFormat, string filter = default(string), string listSeparatorToken = default(string), bool? excludePreviouslyExported = default(bool?), DateTime? createdEarliestTime = default(DateTime?), DateTime? createdOldestTime = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'exportType' is set
            if (exportType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportType' when calling ExportControllerApi->ExportEntities");
            }

            // verify the required parameter 'apiKey' is set
            if (apiKey == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'apiKey' when calling ExportControllerApi->ExportEntities");
            }

            // verify the required parameter 'outputFormat' is set
            if (outputFormat == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'outputFormat' when calling ExportControllerApi->ExportEntities");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "exportType", exportType));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "outputFormat", outputFormat));
            if (filter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filter", filter));
            }
            if (listSeparatorToken != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "listSeparatorToken", listSeparatorToken));
            }
            if (excludePreviouslyExported != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "excludePreviouslyExported", excludePreviouslyExported));
            }
            if (createdEarliestTime != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "createdEarliestTime", createdEarliestTime));
            }
            if (createdOldestTime != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "createdOldestTime", createdOldestTime));
            }

            localVarRequestOptions.Operation = "ExportControllerApi.ExportEntities";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<byte[]>("/export", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ExportEntities", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get export link 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExportLink</returns>
        public ExportLink GetExportLink(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ExportLink> localVarResponse = GetExportLinkWithHttpInfo(exportType, exportOptions, apiKey);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get export link 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExportLink</returns>
        public mailslurp.Client.ApiResponse<ExportLink> GetExportLinkWithHttpInfo(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0)
        {
            // verify the required parameter 'exportType' is set
            if (exportType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportType' when calling ExportControllerApi->GetExportLink");
            }

            // verify the required parameter 'exportOptions' is set
            if (exportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportOptions' when calling ExportControllerApi->GetExportLink");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "exportType", exportType));
            if (apiKey != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            }
            localVarRequestOptions.Data = exportOptions;

            localVarRequestOptions.Operation = "ExportControllerApi.GetExportLink";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ExportLink>("/export", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExportLink", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get export link 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExportLink</returns>
        public async System.Threading.Tasks.Task<ExportLink> GetExportLinkAsync(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ExportLink> localVarResponse = await GetExportLinkWithHttpInfoAsync(exportType, exportOptions, apiKey, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get export link 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="exportType"></param>
        /// <param name="exportOptions"></param>
        /// <param name="apiKey"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExportLink)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ExportLink>> GetExportLinkWithHttpInfoAsync(string exportType, ExportOptions exportOptions, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'exportType' is set
            if (exportType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportType' when calling ExportControllerApi->GetExportLink");
            }

            // verify the required parameter 'exportOptions' is set
            if (exportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'exportOptions' when calling ExportControllerApi->GetExportLink");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "exportType", exportType));
            if (apiKey != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            }
            localVarRequestOptions.Data = exportOptions;

            localVarRequestOptions.Operation = "ExportControllerApi.GetExportLink";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ExportLink>("/export", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExportLink", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ExpiredControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExpiredControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Get default expiration settings
        /// </summary>
        /// <remarks>
        /// Return default times used for inbox expiration
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpirationDefaults</returns>
        ExpirationDefaults GetExpirationDefaults(int operationIndex = 0);

        /// <summary>
        /// Get default expiration settings
        /// </summary>
        /// <remarks>
        /// Return default times used for inbox expiration
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpirationDefaults</returns>
        ApiResponse<ExpirationDefaults> GetExpirationDefaultsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get expired inbox record for a previously existing inbox
        /// </summary>
        /// <remarks>
        /// Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpiredInboxDto</returns>
        ExpiredInboxDto GetExpiredInboxByInboxId(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Get expired inbox record for a previously existing inbox
        /// </summary>
        /// <remarks>
        /// Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpiredInboxDto</returns>
        ApiResponse<ExpiredInboxDto> GetExpiredInboxByInboxIdWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Get an expired inbox record
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpiredInboxDto</returns>
        ExpiredInboxDto GetExpiredInboxRecord(Guid expiredId, int operationIndex = 0);

        /// <summary>
        /// Get an expired inbox record
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpiredInboxDto</returns>
        ApiResponse<ExpiredInboxDto> GetExpiredInboxRecordWithHttpInfo(Guid expiredId, int operationIndex = 0);
        /// <summary>
        /// List records of expired inboxes
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageExpiredInboxRecordProjection</returns>
        PageExpiredInboxRecordProjection GetExpiredInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// List records of expired inboxes
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageExpiredInboxRecordProjection</returns>
        ApiResponse<PageExpiredInboxRecordProjection> GetExpiredInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExpiredControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Get default expiration settings
        /// </summary>
        /// <remarks>
        /// Return default times used for inbox expiration
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpirationDefaults</returns>
        System.Threading.Tasks.Task<ExpirationDefaults> GetExpirationDefaultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get default expiration settings
        /// </summary>
        /// <remarks>
        /// Return default times used for inbox expiration
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpirationDefaults)</returns>
        System.Threading.Tasks.Task<ApiResponse<ExpirationDefaults>> GetExpirationDefaultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get expired inbox record for a previously existing inbox
        /// </summary>
        /// <remarks>
        /// Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpiredInboxDto</returns>
        System.Threading.Tasks.Task<ExpiredInboxDto> GetExpiredInboxByInboxIdAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get expired inbox record for a previously existing inbox
        /// </summary>
        /// <remarks>
        /// Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpiredInboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ExpiredInboxDto>> GetExpiredInboxByInboxIdWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an expired inbox record
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpiredInboxDto</returns>
        System.Threading.Tasks.Task<ExpiredInboxDto> GetExpiredInboxRecordAsync(Guid expiredId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an expired inbox record
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpiredInboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ExpiredInboxDto>> GetExpiredInboxRecordWithHttpInfoAsync(Guid expiredId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// List records of expired inboxes
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageExpiredInboxRecordProjection</returns>
        System.Threading.Tasks.Task<PageExpiredInboxRecordProjection> GetExpiredInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// List records of expired inboxes
        /// </summary>
        /// <remarks>
        /// Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageExpiredInboxRecordProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageExpiredInboxRecordProjection>> GetExpiredInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IExpiredControllerApi : IExpiredControllerApiSync, IExpiredControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ExpiredControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ExpiredControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ExpiredControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ExpiredControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ExpiredControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Get default expiration settings Return default times used for inbox expiration
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpirationDefaults</returns>
        public ExpirationDefaults GetExpirationDefaults(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ExpirationDefaults> localVarResponse = GetExpirationDefaultsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get default expiration settings Return default times used for inbox expiration
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpirationDefaults</returns>
        public mailslurp.Client.ApiResponse<ExpirationDefaults> GetExpirationDefaultsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpirationDefaults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ExpirationDefaults>("/expired/defaults", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpirationDefaults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get default expiration settings Return default times used for inbox expiration
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpirationDefaults</returns>
        public async System.Threading.Tasks.Task<ExpirationDefaults> GetExpirationDefaultsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ExpirationDefaults> localVarResponse = await GetExpirationDefaultsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get default expiration settings Return default times used for inbox expiration
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpirationDefaults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ExpirationDefaults>> GetExpirationDefaultsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpirationDefaults";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ExpirationDefaults>("/expired/defaults", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpirationDefaults", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get expired inbox record for a previously existing inbox Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpiredInboxDto</returns>
        public ExpiredInboxDto GetExpiredInboxByInboxId(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ExpiredInboxDto> localVarResponse = GetExpiredInboxByInboxIdWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get expired inbox record for a previously existing inbox Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpiredInboxDto</returns>
        public mailslurp.Client.ApiResponse<ExpiredInboxDto> GetExpiredInboxByInboxIdWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ExpiredInboxDto>("/expired/inbox/{inboxId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get expired inbox record for a previously existing inbox Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpiredInboxDto</returns>
        public async System.Threading.Tasks.Task<ExpiredInboxDto> GetExpiredInboxByInboxIdAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ExpiredInboxDto> localVarResponse = await GetExpiredInboxByInboxIdWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get expired inbox record for a previously existing inbox Use the inboxId to return an ExpiredInboxRecord if an inbox has expired. Inboxes expire and are disabled if an expiration date is set or plan requires. Returns 404 if no expired inbox is found for the inboxId
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of inbox you want to retrieve (not the inbox ID)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpiredInboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ExpiredInboxDto>> GetExpiredInboxByInboxIdWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("inboxId", mailslurp.Client.ClientUtils.ParameterToString(inboxId)); // path parameter

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxByInboxId";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ExpiredInboxDto>("/expired/inbox/{inboxId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxByInboxId", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an expired inbox record Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ExpiredInboxDto</returns>
        public ExpiredInboxDto GetExpiredInboxRecord(Guid expiredId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ExpiredInboxDto> localVarResponse = GetExpiredInboxRecordWithHttpInfo(expiredId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an expired inbox record Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ExpiredInboxDto</returns>
        public mailslurp.Client.ApiResponse<ExpiredInboxDto> GetExpiredInboxRecordWithHttpInfo(Guid expiredId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("expiredId", mailslurp.Client.ClientUtils.ParameterToString(expiredId)); // path parameter

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ExpiredInboxDto>("/expired/{expiredId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an expired inbox record Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ExpiredInboxDto</returns>
        public async System.Threading.Tasks.Task<ExpiredInboxDto> GetExpiredInboxRecordAsync(Guid expiredId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ExpiredInboxDto> localVarResponse = await GetExpiredInboxRecordWithHttpInfoAsync(expiredId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an expired inbox record Inboxes created with an expiration date will expire after the given date and be moved to an ExpiredInbox entity. You can still read emails in the inbox but it can no longer send or receive emails. Fetch the expired inboxes to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="expiredId">ID of the ExpiredInboxRecord you want to retrieve. This is different from the ID of the inbox you are interested in. See other methods for getting ExpiredInboxRecord for an inbox inboxId</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ExpiredInboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ExpiredInboxDto>> GetExpiredInboxRecordWithHttpInfoAsync(Guid expiredId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("expiredId", mailslurp.Client.ClientUtils.ParameterToString(expiredId)); // path parameter

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxRecord";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ExpiredInboxDto>("/expired/{expiredId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxRecord", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List records of expired inboxes Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageExpiredInboxRecordProjection</returns>
        public PageExpiredInboxRecordProjection GetExpiredInboxes(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageExpiredInboxRecordProjection> localVarResponse = GetExpiredInboxesWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List records of expired inboxes Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageExpiredInboxRecordProjection</returns>
        public mailslurp.Client.ApiResponse<PageExpiredInboxRecordProjection> GetExpiredInboxesWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageExpiredInboxRecordProjection>("/expired", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// List records of expired inboxes Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageExpiredInboxRecordProjection</returns>
        public async System.Threading.Tasks.Task<PageExpiredInboxRecordProjection> GetExpiredInboxesAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageExpiredInboxRecordProjection> localVarResponse = await GetExpiredInboxesWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// List records of expired inboxes Inboxes created with an expiration date will expire after the given date. An ExpiredInboxRecord is created that records the inboxes old ID and email address. You can still read emails in the inbox (using the inboxes old ID) but the email address associated with the inbox can no longer send or receive emails. Fetch expired inbox records to view the old inboxes properties
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in inbox sent email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in inbox sent email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageExpiredInboxRecordProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageExpiredInboxRecordProjection>> GetExpiredInboxesWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ExpiredControllerApi.GetExpiredInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageExpiredInboxRecordProjection>("/expired", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetExpiredInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/EmailVerificationControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailVerificationControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Delete all validation requests
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllValidationRequests(int operationIndex = 0);

        /// <summary>
        /// Delete all validation requests
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllValidationRequestsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete a validation record
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteValidationRequest(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete a validation record
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteValidationRequestWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailValidationRequest</returns>
        PageEmailValidationRequest GetValidationRequests(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailValidationRequest</returns>
        ApiResponse<PageEmailValidationRequest> GetValidationRequestsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ValidateEmailAddressListResult</returns>
        ValidateEmailAddressListResult ValidateEmailAddressList(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0);

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ValidateEmailAddressListResult</returns>
        ApiResponse<ValidateEmailAddressListResult> ValidateEmailAddressListWithHttpInfo(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailVerificationControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Delete all validation requests
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllValidationRequestsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all validation requests
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllValidationRequestsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete a validation record
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteValidationRequestAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete a validation record
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteValidationRequestWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailValidationRequest</returns>
        System.Threading.Tasks.Task<PageEmailValidationRequest> GetValidationRequestsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailValidationRequest)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailValidationRequest>> GetValidationRequestsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ValidateEmailAddressListResult</returns>
        System.Threading.Tasks.Task<ValidateEmailAddressListResult> ValidateEmailAddressListAsync(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ValidateEmailAddressListResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ValidateEmailAddressListResult>> ValidateEmailAddressListWithHttpInfoAsync(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailVerificationControllerApi : IEmailVerificationControllerApiSync, IEmailVerificationControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public EmailVerificationControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public EmailVerificationControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public EmailVerificationControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailVerificationControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public EmailVerificationControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Delete all validation requests 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllValidationRequests(int operationIndex = 0)
        {
            DeleteAllValidationRequestsWithHttpInfo();
        }

        /// <summary>
        /// Delete all validation requests 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllValidationRequestsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "EmailVerificationControllerApi.DeleteAllValidationRequests";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/email-verification", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllValidationRequests", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all validation requests 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllValidationRequestsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllValidationRequestsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all validation requests 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllValidationRequestsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "EmailVerificationControllerApi.DeleteAllValidationRequests";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/email-verification", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllValidationRequests", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a validation record 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteValidationRequest(Guid id, int operationIndex = 0)
        {
            DeleteValidationRequestWithHttpInfo(id);
        }

        /// <summary>
        /// Delete a validation record 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteValidationRequestWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.DeleteValidationRequest";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/email-verification/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteValidationRequest", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a validation record 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteValidationRequestAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteValidationRequestWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete a validation record 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteValidationRequestWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.DeleteValidationRequest";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/email-verification/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteValidationRequest", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailValidationRequest</returns>
        public PageEmailValidationRequest GetValidationRequests(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailValidationRequest> localVarResponse = GetValidationRequestsWithHttpInfo(page, size, sort, searchFilter, since, before, isValid);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailValidationRequest</returns>
        public mailslurp.Client.ApiResponse<PageEmailValidationRequest> GetValidationRequestsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (isValid != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "isValid", isValid));
            }

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.GetValidationRequests";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailValidationRequest>("/email-verification/validation-requests", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetValidationRequests", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailValidationRequest</returns>
        public async System.Threading.Tasks.Task<PageEmailValidationRequest> GetValidationRequestsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailValidationRequest> localVarResponse = await GetValidationRequestsWithHttpInfoAsync(page, size, sort, searchFilter, since, before, isValid, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for paginated result list. (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to DESC)</param>
        /// <param name="searchFilter">Optional search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="isValid">Filter where email is valid is true or false (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailValidationRequest)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailValidationRequest>> GetValidationRequestsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), bool? isValid = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (isValid != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "isValid", isValid));
            }

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.GetValidationRequests";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailValidationRequest>("/email-verification/validation-requests", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetValidationRequests", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ValidateEmailAddressListResult</returns>
        public ValidateEmailAddressListResult ValidateEmailAddressList(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ValidateEmailAddressListResult> localVarResponse = ValidateEmailAddressListWithHttpInfo(validateEmailAddressListOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ValidateEmailAddressListResult</returns>
        public mailslurp.Client.ApiResponse<ValidateEmailAddressListResult> ValidateEmailAddressListWithHttpInfo(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0)
        {
            // verify the required parameter 'validateEmailAddressListOptions' is set
            if (validateEmailAddressListOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'validateEmailAddressListOptions' when calling EmailVerificationControllerApi->ValidateEmailAddressList");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = validateEmailAddressListOptions;

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.ValidateEmailAddressList";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ValidateEmailAddressListResult>("/email-verification/email-address-list", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ValidateEmailAddressList", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ValidateEmailAddressListResult</returns>
        public async System.Threading.Tasks.Task<ValidateEmailAddressListResult> ValidateEmailAddressListAsync(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ValidateEmailAddressListResult> localVarResponse = await ValidateEmailAddressListWithHttpInfoAsync(validateEmailAddressListOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate a list of email addresses. Per unit billing. See your plan for pricing. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="validateEmailAddressListOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ValidateEmailAddressListResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ValidateEmailAddressListResult>> ValidateEmailAddressListWithHttpInfoAsync(ValidateEmailAddressListOptions validateEmailAddressListOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'validateEmailAddressListOptions' is set
            if (validateEmailAddressListOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'validateEmailAddressListOptions' when calling EmailVerificationControllerApi->ValidateEmailAddressList");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = validateEmailAddressListOptions;

            localVarRequestOptions.Operation = "EmailVerificationControllerApi.ValidateEmailAddressList";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ValidateEmailAddressListResult>("/email-verification/email-address-list", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ValidateEmailAddressList", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/EmailControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag.
        /// </summary>
        /// <remarks>
        /// Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreview</returns>
        EmailPreview ApplyImapFlagOperation(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0);

        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag.
        /// </summary>
        /// <remarks>
        /// Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreview</returns>
        ApiResponse<EmailPreview> ApplyImapFlagOperationWithHttpInfo(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0);
        /// <summary>
        /// Check if email can be sent and options are valid.
        /// </summary>
        /// <remarks>
        /// Can user send email to given recipient or is the recipient blocked
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CanSendEmailResults</returns>
        CanSendEmailResults CanSend(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Check if email can be sent and options are valid.
        /// </summary>
        /// <remarks>
        /// Can user send email to given recipient or is the recipient blocked
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CanSendEmailResults</returns>
        ApiResponse<CanSendEmailResults> CanSendWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Detect broken links, spelling, and images in email content
        /// </summary>
        /// <remarks>
        /// Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailBodyResults</returns>
        CheckEmailBodyResults CheckEmailBody(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Detect broken links, spelling, and images in email content
        /// </summary>
        /// <remarks>
        /// Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailBodyResults</returns>
        ApiResponse<CheckEmailBodyResults> CheckEmailBodyWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body.
        /// </summary>
        /// <remarks>
        /// Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailBodyFeatureSupportResults</returns>
        CheckEmailBodyFeatureSupportResults CheckEmailBodyFeatureSupport(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body.
        /// </summary>
        /// <remarks>
        /// Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailBodyFeatureSupportResults</returns>
        ApiResponse<CheckEmailBodyFeatureSupportResults> CheckEmailBodyFeatureSupportWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Show which email programs and devices support the features used in an email body.
        /// </summary>
        /// <remarks>
        /// Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailClientSupportResults</returns>
        CheckEmailClientSupportResults CheckEmailClientSupport(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0);

        /// <summary>
        /// Show which email programs and devices support the features used in an email body.
        /// </summary>
        /// <remarks>
        /// Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailClientSupportResults</returns>
        ApiResponse<CheckEmailClientSupportResults> CheckEmailClientSupportWithHttpInfo(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0);
        /// <summary>
        /// Delete all emails in all inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllEmails(int operationIndex = 0);

        /// <summary>
        /// Delete all emails in all inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllEmailsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete an email
        /// </summary>
        /// <remarks>
        /// Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteEmail(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Delete an email
        /// </summary>
        /// <remarks>
        /// Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteEmailWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        byte[] DownloadAttachment(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0);

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        ApiResponse<byte[]> DownloadAttachmentWithHttpInfo(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0);
        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DownloadAttachmentDto</returns>
        DownloadAttachmentDto DownloadAttachmentBase64(Guid emailId, string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DownloadAttachmentDto</returns>
        ApiResponse<DownloadAttachmentDto> DownloadAttachmentBase64WithHttpInfo(Guid emailId, string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a string
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string DownloadBody(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a string
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> DownloadBodyWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a stream / array of bytes.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        byte[] DownloadBodyBytes(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a stream / array of bytes.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        ApiResponse<byte[]> DownloadBodyBytesWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Forward email to recipients
        /// </summary>
        /// <remarks>
        /// Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto ForwardEmail(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Forward email to recipients
        /// </summary>
        /// <remarks>
        /// Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> ForwardEmailWithHttpInfo(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods.
        /// </summary>
        /// <remarks>
        /// Returns the metadata such as name and content-type for a given attachment and email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentMetaData</returns>
        AttachmentMetaData GetAttachmentMetaData(Guid emailId, string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods.
        /// </summary>
        /// <remarks>
        /// Returns the metadata such as name and content-type for a given attachment and email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentMetaData</returns>
        ApiResponse<AttachmentMetaData> GetAttachmentMetaDataWithHttpInfo(Guid emailId, string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email GetEmail(Guid emailId, bool? decode = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> GetEmailWithHttpInfo(Guid emailId, bool? decode = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments.
        /// </summary>
        /// <remarks>
        /// Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;AttachmentMetaData&gt;</returns>
        List<AttachmentMetaData> GetEmailAttachments(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments.
        /// </summary>
        /// <remarks>
        /// Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;AttachmentMetaData&gt;</returns>
        ApiResponse<List<AttachmentMetaData>> GetEmailAttachmentsWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups.
        /// </summary>
        /// <remarks>
        /// Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailContentMatchResult</returns>
        EmailContentMatchResult GetEmailContentMatch(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0);

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups.
        /// </summary>
        /// <remarks>
        /// Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailContentMatchResult</returns>
        ApiResponse<EmailContentMatchResult> GetEmailContentMatchWithHttpInfo(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0);
        /// <summary>
        /// Get email content part by content type
        /// </summary>
        /// <remarks>
        /// Get email body content parts from a multipart email message for a given content type
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailContentPartResult</returns>
        EmailContentPartResult GetEmailContentPart(Guid emailId, string contentType, int operationIndex = 0);

        /// <summary>
        /// Get email content part by content type
        /// </summary>
        /// <remarks>
        /// Get email body content parts from a multipart email message for a given content type
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailContentPartResult</returns>
        ApiResponse<EmailContentPartResult> GetEmailContentPartWithHttpInfo(Guid emailId, string contentType, int operationIndex = 0);
        /// <summary>
        /// Get email count
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        CountDto GetEmailCount(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get email count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        ApiResponse<CountDto> GetEmailCountWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context.
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        string GetEmailHTML(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context.
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        ApiResponse<string> GetEmailHTMLWithHttpInfo(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailHtmlDto</returns>
        EmailHtmlDto GetEmailHTMLJson(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailHtmlDto</returns>
        ApiResponse<EmailHtmlDto> GetEmailHTMLJsonWithHttpInfo(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailTextLinesResult</returns>
        EmailTextLinesResult GetEmailHTMLQuery(Guid emailId, string htmlSelector, int operationIndex = 0);

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailTextLinesResult</returns>
        ApiResponse<EmailTextLinesResult> GetEmailHTMLQueryWithHttpInfo(Guid emailId, string htmlSelector, int operationIndex = 0);
        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content)
        /// </summary>
        /// <remarks>
        /// HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailLinksResult</returns>
        EmailLinksResult GetEmailLinks(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content)
        /// </summary>
        /// <remarks>
        /// HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailLinksResult</returns>
        ApiResponse<EmailLinksResult> GetEmailLinksWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get email URLs for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreviewUrls</returns>
        EmailPreviewUrls GetEmailPreviewURLs(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get email URLs for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreviewUrls</returns>
        ApiResponse<EmailPreviewUrls> GetEmailPreviewURLsWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string
        /// </summary>
        /// <remarks>
        /// Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailScreenshotResult</returns>
        EmailScreenshotResult GetEmailScreenshotAsBase64(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0);

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string
        /// </summary>
        /// <remarks>
        /// Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailScreenshotResult</returns>
        ApiResponse<EmailScreenshotResult> GetEmailScreenshotAsBase64WithHttpInfo(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0);
        /// <summary>
        /// Take a screenshot of an email in a browser
        /// </summary>
        /// <remarks>
        /// Returns binary octet-stream of screenshot of the given email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void GetEmailScreenshotAsBinary(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0);

        /// <summary>
        /// Take a screenshot of an email in a browser
        /// </summary>
        /// <remarks>
        /// Returns binary octet-stream of screenshot of the given email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> GetEmailScreenshotAsBinaryWithHttpInfo(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0);
        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailTextLinesResult</returns>
        EmailTextLinesResult GetEmailTextLines(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0);

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailTextLinesResult</returns>
        ApiResponse<EmailTextLinesResult> GetEmailTextLinesWithHttpInfo(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0);
        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        PageEmailProjection GetEmailsOffsetPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        ApiResponse<PageEmailProjection> GetEmailsOffsetPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        PageEmailProjection GetEmailsPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        ApiResponse<PageEmailProjection> GetEmailsPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get gravatar url for email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GravatarUrl</returns>
        GravatarUrl GetGravatarUrlForEmailAddress(string emailAddress, string size = default(string), int operationIndex = 0);

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get gravatar url for email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GravatarUrl</returns>
        ApiResponse<GravatarUrl> GetGravatarUrlForEmailAddressWithHttpInfo(string emailAddress, string size = default(string), int operationIndex = 0);
        /// <summary>
        /// Get latest email in all inboxes. Most recently received.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email GetLatestEmail(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0);

        /// <summary>
        /// Get latest email in all inboxes. Most recently received.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> GetLatestEmailWithHttpInfo(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0);
        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        Email GetLatestEmailInInbox1(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        ApiResponse<Email> GetLatestEmailInInbox1WithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Get all organization emails. List team or shared test email accounts
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        PageEmailProjection GetOrganizationEmailsPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        ApiResponse<PageEmailProjection> GetOrganizationEmailsPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void GetRawEmailContents(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> GetRawEmailContentsWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>RawEmailJson</returns>
        RawEmailJson GetRawEmailJson(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of RawEmailJson</returns>
        ApiResponse<RawEmailJson> GetRawEmailJsonWithHttpInfo(Guid emailId, int operationIndex = 0);
        /// <summary>
        /// Get unread email count
        /// </summary>
        /// <remarks>
        /// Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnreadCount</returns>
        UnreadCount GetUnreadEmailCount(Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get unread email count
        /// </summary>
        /// <remarks>
        /// Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnreadCount</returns>
        ApiResponse<UnreadCount> GetUnreadEmailCountWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Mark all emails as read or unread
        /// </summary>
        /// <remarks>
        /// Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void MarkAllAsRead(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Mark all emails as read or unread
        /// </summary>
        /// <remarks>
        /// Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> MarkAllAsReadWithHttpInfo(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Mark an email as read or unread
        /// </summary>
        /// <remarks>
        /// Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreview</returns>
        EmailPreview MarkAsRead(Guid emailId, bool? read = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Mark an email as read or unread
        /// </summary>
        /// <remarks>
        /// Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreview</returns>
        ApiResponse<EmailPreview> MarkAsReadWithHttpInfo(Guid emailId, bool? read = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto ReplyToEmail(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> ReplyToEmailWithHttpInfo(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Get all emails by search criteria. Return in paginated form.
        /// </summary>
        /// <remarks>
        /// Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        PageEmailProjection SearchEmails(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0);

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form.
        /// </summary>
        /// <remarks>
        /// Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        ApiResponse<PageEmailProjection> SearchEmailsWithHttpInfo(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0);
        /// <summary>
        /// Send email
        /// </summary>
        /// <remarks>
        /// Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendEmailSourceOptional(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Send email
        /// </summary>
        /// <remarks>
        /// Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendEmailSourceOptionalWithHttpInfo(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Validate email HTML contents
        /// </summary>
        /// <remarks>
        /// Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ValidationDto</returns>
        ValidationDto ValidateEmail(Guid emailId, int operationIndex = 0);

        /// <summary>
        /// Validate email HTML contents
        /// </summary>
        /// <remarks>
        /// Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ValidationDto</returns>
        ApiResponse<ValidationDto> ValidateEmailWithHttpInfo(Guid emailId, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag.
        /// </summary>
        /// <remarks>
        /// Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreview</returns>
        System.Threading.Tasks.Task<EmailPreview> ApplyImapFlagOperationAsync(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag.
        /// </summary>
        /// <remarks>
        /// Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreview)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailPreview>> ApplyImapFlagOperationWithHttpInfoAsync(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Check if email can be sent and options are valid.
        /// </summary>
        /// <remarks>
        /// Can user send email to given recipient or is the recipient blocked
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CanSendEmailResults</returns>
        System.Threading.Tasks.Task<CanSendEmailResults> CanSendAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Check if email can be sent and options are valid.
        /// </summary>
        /// <remarks>
        /// Can user send email to given recipient or is the recipient blocked
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CanSendEmailResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<CanSendEmailResults>> CanSendWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Detect broken links, spelling, and images in email content
        /// </summary>
        /// <remarks>
        /// Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailBodyResults</returns>
        System.Threading.Tasks.Task<CheckEmailBodyResults> CheckEmailBodyAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Detect broken links, spelling, and images in email content
        /// </summary>
        /// <remarks>
        /// Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailBodyResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<CheckEmailBodyResults>> CheckEmailBodyWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body.
        /// </summary>
        /// <remarks>
        /// Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailBodyFeatureSupportResults</returns>
        System.Threading.Tasks.Task<CheckEmailBodyFeatureSupportResults> CheckEmailBodyFeatureSupportAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body.
        /// </summary>
        /// <remarks>
        /// Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailBodyFeatureSupportResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<CheckEmailBodyFeatureSupportResults>> CheckEmailBodyFeatureSupportWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Show which email programs and devices support the features used in an email body.
        /// </summary>
        /// <remarks>
        /// Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailClientSupportResults</returns>
        System.Threading.Tasks.Task<CheckEmailClientSupportResults> CheckEmailClientSupportAsync(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Show which email programs and devices support the features used in an email body.
        /// </summary>
        /// <remarks>
        /// Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailClientSupportResults)</returns>
        System.Threading.Tasks.Task<ApiResponse<CheckEmailClientSupportResults>> CheckEmailClientSupportWithHttpInfoAsync(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all emails in all inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all emails in all inboxes.
        /// </summary>
        /// <remarks>
        /// Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an email
        /// </summary>
        /// <remarks>
        /// Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteEmailAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an email
        /// </summary>
        /// <remarks>
        /// Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteEmailWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        System.Threading.Tasks.Task<byte[]> DownloadAttachmentAsync(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        System.Threading.Tasks.Task<ApiResponse<byte[]>> DownloadAttachmentWithHttpInfoAsync(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DownloadAttachmentDto</returns>
        System.Threading.Tasks.Task<DownloadAttachmentDto> DownloadAttachmentBase64Async(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DownloadAttachmentDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DownloadAttachmentDto>> DownloadAttachmentBase64WithHttpInfoAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a string
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> DownloadBodyAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a string
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> DownloadBodyWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a stream / array of bytes.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        System.Threading.Tasks.Task<byte[]> DownloadBodyBytesAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header.
        /// </summary>
        /// <remarks>
        /// Returns the specified email body for a given email as a stream / array of bytes.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        System.Threading.Tasks.Task<ApiResponse<byte[]>> DownloadBodyBytesWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Forward email to recipients
        /// </summary>
        /// <remarks>
        /// Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> ForwardEmailAsync(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Forward email to recipients
        /// </summary>
        /// <remarks>
        /// Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> ForwardEmailWithHttpInfoAsync(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods.
        /// </summary>
        /// <remarks>
        /// Returns the metadata such as name and content-type for a given attachment and email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentMetaData</returns>
        System.Threading.Tasks.Task<AttachmentMetaData> GetAttachmentMetaDataAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods.
        /// </summary>
        /// <remarks>
        /// Returns the metadata such as name and content-type for a given attachment and email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentMetaData)</returns>
        System.Threading.Tasks.Task<ApiResponse<AttachmentMetaData>> GetAttachmentMetaDataWithHttpInfoAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> GetEmailAsync(Guid emailId, bool? decode = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController.
        /// </summary>
        /// <remarks>
        /// Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> GetEmailWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments.
        /// </summary>
        /// <remarks>
        /// Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;AttachmentMetaData&gt;</returns>
        System.Threading.Tasks.Task<List<AttachmentMetaData>> GetEmailAttachmentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments.
        /// </summary>
        /// <remarks>
        /// Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;AttachmentMetaData&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<AttachmentMetaData>>> GetEmailAttachmentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups.
        /// </summary>
        /// <remarks>
        /// Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailContentMatchResult</returns>
        System.Threading.Tasks.Task<EmailContentMatchResult> GetEmailContentMatchAsync(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups.
        /// </summary>
        /// <remarks>
        /// Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailContentMatchResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailContentMatchResult>> GetEmailContentMatchWithHttpInfoAsync(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email content part by content type
        /// </summary>
        /// <remarks>
        /// Get email body content parts from a multipart email message for a given content type
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailContentPartResult</returns>
        System.Threading.Tasks.Task<EmailContentPartResult> GetEmailContentPartAsync(Guid emailId, string contentType, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email content part by content type
        /// </summary>
        /// <remarks>
        /// Get email body content parts from a multipart email message for a given content type
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailContentPartResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailContentPartResult>> GetEmailContentPartWithHttpInfoAsync(Guid emailId, string contentType, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        System.Threading.Tasks.Task<CountDto> GetEmailCountAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email count
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<CountDto>> GetEmailCountWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context.
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        System.Threading.Tasks.Task<string> GetEmailHTMLAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context.
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        System.Threading.Tasks.Task<ApiResponse<string>> GetEmailHTMLWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailHtmlDto</returns>
        System.Threading.Tasks.Task<EmailHtmlDto> GetEmailHTMLJsonAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content
        /// </summary>
        /// <remarks>
        /// Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailHtmlDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailHtmlDto>> GetEmailHTMLJsonWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailTextLinesResult</returns>
        System.Threading.Tasks.Task<EmailTextLinesResult> GetEmailHTMLQueryAsync(Guid emailId, string htmlSelector, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailTextLinesResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailTextLinesResult>> GetEmailHTMLQueryWithHttpInfoAsync(Guid emailId, string htmlSelector, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content)
        /// </summary>
        /// <remarks>
        /// HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailLinksResult</returns>
        System.Threading.Tasks.Task<EmailLinksResult> GetEmailLinksAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content)
        /// </summary>
        /// <remarks>
        /// HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailLinksResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailLinksResult>> GetEmailLinksWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email URLs for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreviewUrls</returns>
        System.Threading.Tasks.Task<EmailPreviewUrls> GetEmailPreviewURLsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email URLs for viewing in browser or downloading
        /// </summary>
        /// <remarks>
        /// Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreviewUrls)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailPreviewUrls>> GetEmailPreviewURLsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string
        /// </summary>
        /// <remarks>
        /// Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailScreenshotResult</returns>
        System.Threading.Tasks.Task<EmailScreenshotResult> GetEmailScreenshotAsBase64Async(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string
        /// </summary>
        /// <remarks>
        /// Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailScreenshotResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailScreenshotResult>> GetEmailScreenshotAsBase64WithHttpInfoAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Take a screenshot of an email in a browser
        /// </summary>
        /// <remarks>
        /// Returns binary octet-stream of screenshot of the given email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task GetEmailScreenshotAsBinaryAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Take a screenshot of an email in a browser
        /// </summary>
        /// <remarks>
        /// Returns binary octet-stream of screenshot of the given email
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> GetEmailScreenshotAsBinaryWithHttpInfoAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailTextLinesResult</returns>
        System.Threading.Tasks.Task<EmailTextLinesResult> GetEmailTextLinesAsync(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters
        /// </summary>
        /// <remarks>
        /// Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailTextLinesResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailTextLinesResult>> GetEmailTextLinesWithHttpInfoAsync(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        System.Threading.Tasks.Task<PageEmailProjection> GetEmailsOffsetPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailProjection>> GetEmailsOffsetPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        System.Threading.Tasks.Task<PageEmailProjection> GetEmailsPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all.
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailProjection>> GetEmailsPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get gravatar url for email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GravatarUrl</returns>
        System.Threading.Tasks.Task<GravatarUrl> GetGravatarUrlForEmailAddressAsync(string emailAddress, string size = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// Get gravatar url for email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GravatarUrl)</returns>
        System.Threading.Tasks.Task<ApiResponse<GravatarUrl>> GetGravatarUrlForEmailAddressWithHttpInfoAsync(string emailAddress, string size = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get latest email in all inboxes. Most recently received.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> GetLatestEmailAsync(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get latest email in all inboxes. Most recently received.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> GetLatestEmailWithHttpInfoAsync(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        System.Threading.Tasks.Task<Email> GetLatestEmailInInbox1Async(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet.
        /// </summary>
        /// <remarks>
        /// Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        System.Threading.Tasks.Task<ApiResponse<Email>> GetLatestEmailInInbox1WithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all organization emails. List team or shared test email accounts
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        System.Threading.Tasks.Task<PageEmailProjection> GetOrganizationEmailsPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts
        /// </summary>
        /// <remarks>
        /// By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailProjection>> GetOrganizationEmailsPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task GetRawEmailContentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> GetRawEmailContentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of RawEmailJson</returns>
        System.Threading.Tasks.Task<RawEmailJson> GetRawEmailJsonAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format.
        /// </summary>
        /// <remarks>
        /// Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (RawEmailJson)</returns>
        System.Threading.Tasks.Task<ApiResponse<RawEmailJson>> GetRawEmailJsonWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get unread email count
        /// </summary>
        /// <remarks>
        /// Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnreadCount</returns>
        System.Threading.Tasks.Task<UnreadCount> GetUnreadEmailCountAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get unread email count
        /// </summary>
        /// <remarks>
        /// Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnreadCount)</returns>
        System.Threading.Tasks.Task<ApiResponse<UnreadCount>> GetUnreadEmailCountWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Mark all emails as read or unread
        /// </summary>
        /// <remarks>
        /// Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task MarkAllAsReadAsync(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Mark all emails as read or unread
        /// </summary>
        /// <remarks>
        /// Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> MarkAllAsReadWithHttpInfoAsync(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Mark an email as read or unread
        /// </summary>
        /// <remarks>
        /// Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreview</returns>
        System.Threading.Tasks.Task<EmailPreview> MarkAsReadAsync(Guid emailId, bool? read = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Mark an email as read or unread
        /// </summary>
        /// <remarks>
        /// Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreview)</returns>
        System.Threading.Tasks.Task<ApiResponse<EmailPreview>> MarkAsReadWithHttpInfoAsync(Guid emailId, bool? read = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> ReplyToEmailAsync(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> ReplyToEmailWithHttpInfoAsync(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all emails by search criteria. Return in paginated form.
        /// </summary>
        /// <remarks>
        /// Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        System.Threading.Tasks.Task<PageEmailProjection> SearchEmailsAsync(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form.
        /// </summary>
        /// <remarks>
        /// Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailProjection>> SearchEmailsWithHttpInfoAsync(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send email
        /// </summary>
        /// <remarks>
        /// Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendEmailSourceOptionalAsync(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send email
        /// </summary>
        /// <remarks>
        /// Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendEmailSourceOptionalWithHttpInfoAsync(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Validate email HTML contents
        /// </summary>
        /// <remarks>
        /// Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ValidationDto</returns>
        System.Threading.Tasks.Task<ValidationDto> ValidateEmailAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Validate email HTML contents
        /// </summary>
        /// <remarks>
        /// Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ValidationDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ValidationDto>> ValidateEmailWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IEmailControllerApi : IEmailControllerApiSync, IEmailControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public EmailControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public EmailControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public EmailControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="EmailControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public EmailControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag. Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreview</returns>
        public EmailPreview ApplyImapFlagOperation(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailPreview> localVarResponse = ApplyImapFlagOperationWithHttpInfo(emailId, imapFlagOperationOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag. Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreview</returns>
        public mailslurp.Client.ApiResponse<EmailPreview> ApplyImapFlagOperationWithHttpInfo(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0)
        {
            // verify the required parameter 'imapFlagOperationOptions' is set
            if (imapFlagOperationOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapFlagOperationOptions' when calling EmailControllerApi->ApplyImapFlagOperation");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = imapFlagOperationOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ApplyImapFlagOperation";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmailPreview>("/emails/{emailId}/imap-flag-operation", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ApplyImapFlagOperation", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag. Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreview</returns>
        public async System.Threading.Tasks.Task<EmailPreview> ApplyImapFlagOperationAsync(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailPreview> localVarResponse = await ApplyImapFlagOperationWithHttpInfoAsync(emailId, imapFlagOperationOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Set IMAP flags associated with a message. Only supports &#39;\\Seen&#39; flag. Apply RFC3501 section-2.3.2 IMAP flag operations on an email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="imapFlagOperationOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreview)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailPreview>> ApplyImapFlagOperationWithHttpInfoAsync(Guid emailId, ImapFlagOperationOptions imapFlagOperationOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'imapFlagOperationOptions' is set
            if (imapFlagOperationOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'imapFlagOperationOptions' when calling EmailControllerApi->ApplyImapFlagOperation");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = imapFlagOperationOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ApplyImapFlagOperation";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmailPreview>("/emails/{emailId}/imap-flag-operation", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ApplyImapFlagOperation", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Check if email can be sent and options are valid. Can user send email to given recipient or is the recipient blocked
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CanSendEmailResults</returns>
        public CanSendEmailResults CanSend(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CanSendEmailResults> localVarResponse = CanSendWithHttpInfo(inboxId, sendEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Check if email can be sent and options are valid. Can user send email to given recipient or is the recipient blocked
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CanSendEmailResults</returns>
        public mailslurp.Client.ApiResponse<CanSendEmailResults> CanSendWithHttpInfo(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling EmailControllerApi->CanSend");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.CanSend";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<CanSendEmailResults>("/emails/can-send", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CanSend", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Check if email can be sent and options are valid. Can user send email to given recipient or is the recipient blocked
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CanSendEmailResults</returns>
        public async System.Threading.Tasks.Task<CanSendEmailResults> CanSendAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CanSendEmailResults> localVarResponse = await CanSendWithHttpInfoAsync(inboxId, sendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Check if email can be sent and options are valid. Can user send email to given recipient or is the recipient blocked
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to send the email from</param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CanSendEmailResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CanSendEmailResults>> CanSendWithHttpInfoAsync(Guid inboxId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling EmailControllerApi->CanSend");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.CanSend";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<CanSendEmailResults>("/emails/can-send", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CanSend", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Detect broken links, spelling, and images in email content Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailBodyResults</returns>
        public CheckEmailBodyResults CheckEmailBody(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CheckEmailBodyResults> localVarResponse = CheckEmailBodyWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Detect broken links, spelling, and images in email content Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailBodyResults</returns>
        public mailslurp.Client.ApiResponse<CheckEmailBodyResults> CheckEmailBodyWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailBody";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<CheckEmailBodyResults>("/emails/{emailId}/check-email-body", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailBody", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Detect broken links, spelling, and images in email content Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailBodyResults</returns>
        public async System.Threading.Tasks.Task<CheckEmailBodyResults> CheckEmailBodyAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CheckEmailBodyResults> localVarResponse = await CheckEmailBodyWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Detect broken links, spelling, and images in email content Find dead links, broken images, and spelling mistakes in email body. Will call included links via HTTP so do not invoke if your links are sensitive or stateful. Any resource that returns a 4xx or 5xx response or is not reachable via HEAD or GET HTTP operations will be considered unhealthy.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailBodyResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CheckEmailBodyResults>> CheckEmailBodyWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailBody";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<CheckEmailBodyResults>("/emails/{emailId}/check-email-body", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailBody", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body. Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailBodyFeatureSupportResults</returns>
        public CheckEmailBodyFeatureSupportResults CheckEmailBodyFeatureSupport(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CheckEmailBodyFeatureSupportResults> localVarResponse = CheckEmailBodyFeatureSupportWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body. Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailBodyFeatureSupportResults</returns>
        public mailslurp.Client.ApiResponse<CheckEmailBodyFeatureSupportResults> CheckEmailBodyFeatureSupportWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailBodyFeatureSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<CheckEmailBodyFeatureSupportResults>("/emails/{emailId}/check-email-body-feature-support", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailBodyFeatureSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body. Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailBodyFeatureSupportResults</returns>
        public async System.Threading.Tasks.Task<CheckEmailBodyFeatureSupportResults> CheckEmailBodyFeatureSupportAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CheckEmailBodyFeatureSupportResults> localVarResponse = await CheckEmailBodyFeatureSupportWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Show which mail clients support the HTML and CSS features used in an email body. Detect HTML and CSS features inside an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailBodyFeatureSupportResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CheckEmailBodyFeatureSupportResults>> CheckEmailBodyFeatureSupportWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailBodyFeatureSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<CheckEmailBodyFeatureSupportResults>("/emails/{emailId}/check-email-body-feature-support", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailBodyFeatureSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Show which email programs and devices support the features used in an email body. Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CheckEmailClientSupportResults</returns>
        public CheckEmailClientSupportResults CheckEmailClientSupport(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CheckEmailClientSupportResults> localVarResponse = CheckEmailClientSupportWithHttpInfo(checkEmailClientSupportOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Show which email programs and devices support the features used in an email body. Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CheckEmailClientSupportResults</returns>
        public mailslurp.Client.ApiResponse<CheckEmailClientSupportResults> CheckEmailClientSupportWithHttpInfo(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0)
        {
            // verify the required parameter 'checkEmailClientSupportOptions' is set
            if (checkEmailClientSupportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'checkEmailClientSupportOptions' when calling EmailControllerApi->CheckEmailClientSupport");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = checkEmailClientSupportOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailClientSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<CheckEmailClientSupportResults>("/emails/check-email-client-support", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailClientSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Show which email programs and devices support the features used in an email body. Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CheckEmailClientSupportResults</returns>
        public async System.Threading.Tasks.Task<CheckEmailClientSupportResults> CheckEmailClientSupportAsync(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CheckEmailClientSupportResults> localVarResponse = await CheckEmailClientSupportWithHttpInfoAsync(checkEmailClientSupportOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Show which email programs and devices support the features used in an email body. Evaluate the features used in an email body and return a report of email client support across different platforms and versions.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="checkEmailClientSupportOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CheckEmailClientSupportResults)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CheckEmailClientSupportResults>> CheckEmailClientSupportWithHttpInfoAsync(CheckEmailClientSupportOptions checkEmailClientSupportOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'checkEmailClientSupportOptions' is set
            if (checkEmailClientSupportOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'checkEmailClientSupportOptions' when calling EmailControllerApi->CheckEmailClientSupport");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = checkEmailClientSupportOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.CheckEmailClientSupport";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<CheckEmailClientSupportResults>("/emails/check-email-client-support", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CheckEmailClientSupport", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in all inboxes. Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllEmails(int operationIndex = 0)
        {
            DeleteAllEmailsWithHttpInfo();
        }

        /// <summary>
        /// Delete all emails in all inboxes. Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllEmailsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "EmailControllerApi.DeleteAllEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in all inboxes. Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllEmailsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllEmailsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all emails in all inboxes. Deletes all emails in your account. Be careful as emails cannot be recovered
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllEmailsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "EmailControllerApi.DeleteAllEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an email Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteEmail(Guid emailId, int operationIndex = 0)
        {
            DeleteEmailWithHttpInfo(emailId);
        }

        /// <summary>
        /// Delete an email Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteEmailWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DeleteEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/emails/{emailId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an email Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteEmailAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteEmailWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an email Deletes an email and removes it from the inbox. Deleted emails cannot be recovered.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to delete</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteEmailWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DeleteEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/emails/{emailId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        public byte[] DownloadAttachment(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = DownloadAttachmentWithHttpInfo(emailId, attachmentId, apiKey);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        public mailslurp.Client.ApiResponse<byte[]> DownloadAttachmentWithHttpInfo(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->DownloadAttachment");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter
            if (apiKey != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<byte[]>("/emails/{emailId}/attachments/{attachmentId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        public async System.Threading.Tasks.Task<byte[]> DownloadAttachmentAsync(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = await DownloadAttachmentWithHttpInfoAsync(emailId, attachmentId, apiKey, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment bytes. Returned as &#x60;octet-stream&#x60; with content type header. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints and convert the base 64 encoded content to a file or string. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="apiKey">Can pass apiKey in url for this request if you wish to download the file in a browser. Content type will be set to original content type of the attachment file. This is so that browsers can download the file correctly. (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<byte[]>> DownloadAttachmentWithHttpInfoAsync(Guid emailId, string attachmentId, string apiKey = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->DownloadAttachment");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter
            if (apiKey != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "apiKey", apiKey));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<byte[]>("/emails/{emailId}/attachments/{attachmentId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DownloadAttachmentDto</returns>
        public DownloadAttachmentDto DownloadAttachmentBase64(Guid emailId, string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DownloadAttachmentDto> localVarResponse = DownloadAttachmentBase64WithHttpInfo(emailId, attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DownloadAttachmentDto</returns>
        public mailslurp.Client.ApiResponse<DownloadAttachmentDto> DownloadAttachmentBase64WithHttpInfo(Guid emailId, string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->DownloadAttachmentBase64");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadAttachmentBase64";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DownloadAttachmentDto>("/emails/{emailId}/attachments/{attachmentId}/base64", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentBase64", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DownloadAttachmentDto</returns>
        public async System.Threading.Tasks.Task<DownloadAttachmentDto> DownloadAttachmentBase64Async(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DownloadAttachmentDto> localVarResponse = await DownloadAttachmentBase64WithHttpInfoAsync(emailId, attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as an alternative to binary responses. Decode the &#x60;base64FileContents&#x60; as a &#x60;utf-8&#x60; encoded string or array of bytes depending on the &#x60;contentType&#x60;. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DownloadAttachmentDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DownloadAttachmentDto>> DownloadAttachmentBase64WithHttpInfoAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->DownloadAttachmentBase64");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadAttachmentBase64";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DownloadAttachmentDto>("/emails/{emailId}/attachments/{attachmentId}/base64", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentBase64", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header. Returns the specified email body for a given email as a string
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string DownloadBody(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = DownloadBodyWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header. Returns the specified email body for a given email as a string
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> DownloadBodyWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/plain",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadBody";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<string>("/emails/{emailId}/body", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadBody", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header. Returns the specified email body for a given email as a string
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> DownloadBodyAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await DownloadBodyWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email body as string. Returned as &#x60;plain/text&#x60; with content type header. Returns the specified email body for a given email as a string
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> DownloadBodyWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/plain",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadBody";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<string>("/emails/{emailId}/body", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadBody", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header. Returns the specified email body for a given email as a stream / array of bytes.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        public byte[] DownloadBodyBytes(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = DownloadBodyBytesWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header. Returns the specified email body for a given email as a stream / array of bytes.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        public mailslurp.Client.ApiResponse<byte[]> DownloadBodyBytesWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadBodyBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<byte[]>("/emails/{emailId}/body-bytes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadBodyBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header. Returns the specified email body for a given email as a stream / array of bytes.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        public async System.Threading.Tasks.Task<byte[]> DownloadBodyBytesAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = await DownloadBodyBytesWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email body in bytes. Returned as &#x60;octet-stream&#x60; with content type header. Returns the specified email body for a given email as a stream / array of bytes.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<byte[]>> DownloadBodyBytesWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.DownloadBodyBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<byte[]>("/emails/{emailId}/body-bytes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadBodyBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Forward email to recipients Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto ForwardEmail(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = ForwardEmailWithHttpInfo(emailId, forwardEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Forward email to recipients Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> ForwardEmailWithHttpInfo(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'forwardEmailOptions' is set
            if (forwardEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'forwardEmailOptions' when calling EmailControllerApi->ForwardEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = forwardEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ForwardEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SentEmailDto>("/emails/{emailId}/forward", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ForwardEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Forward email to recipients Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> ForwardEmailAsync(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await ForwardEmailWithHttpInfoAsync(emailId, forwardEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Forward email to recipients Forward an existing email to new recipients. The sender of the email will be the inbox that received the email you are forwarding. You can override the sender with the &#x60;from&#x60; option. Note you must have access to the from address in MailSlurp to use the override. For more control consider fetching the email and sending it a new using the send email endpoints.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="forwardEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> ForwardEmailWithHttpInfoAsync(Guid emailId, ForwardEmailOptions forwardEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'forwardEmailOptions' is set
            if (forwardEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'forwardEmailOptions' when calling EmailControllerApi->ForwardEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = forwardEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ForwardEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SentEmailDto>("/emails/{emailId}/forward", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ForwardEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods. Returns the metadata such as name and content-type for a given attachment and email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentMetaData</returns>
        public AttachmentMetaData GetAttachmentMetaData(Guid emailId, string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AttachmentMetaData> localVarResponse = GetAttachmentMetaDataWithHttpInfo(emailId, attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods. Returns the metadata such as name and content-type for a given attachment and email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentMetaData</returns>
        public mailslurp.Client.ApiResponse<AttachmentMetaData> GetAttachmentMetaDataWithHttpInfo(Guid emailId, string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->GetAttachmentMetaData");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetAttachmentMetaData";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AttachmentMetaData>("/emails/{emailId}/attachments/{attachmentId}/metadata", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachmentMetaData", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods. Returns the metadata such as name and content-type for a given attachment and email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentMetaData</returns>
        public async System.Threading.Tasks.Task<AttachmentMetaData> GetAttachmentMetaDataAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AttachmentMetaData> localVarResponse = await GetAttachmentMetaDataWithHttpInfoAsync(emailId, attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment metadata. This is the &#x60;contentType&#x60; and &#x60;contentLength&#x60; of an attachment. To get the individual attachments  use the &#x60;downloadAttachment&#x60; methods. Returns the metadata such as name and content-type for a given attachment and email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentMetaData)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AttachmentMetaData>> GetAttachmentMetaDataWithHttpInfoAsync(Guid emailId, string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling EmailControllerApi->GetAttachmentMetaData");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetAttachmentMetaData";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AttachmentMetaData>("/emails/{emailId}/attachments/{attachmentId}/metadata", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachmentMetaData", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController. Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email GetEmail(Guid emailId, bool? decode = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = GetEmailWithHttpInfo(emailId, decode);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController. Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> GetEmailWithHttpInfo(Guid emailId, bool? decode = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/emails/{emailId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController. Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> GetEmailAsync(Guid emailId, bool? decode = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await GetEmailWithHttpInfoAsync(emailId, decode, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content including headers and body. Expects email to exist by ID. For emails that may not have arrived yet use the WaitForController. Returns a email summary object with headers and content. To retrieve the raw unparsed email use the getRawEmail endpoints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode">Decode email body quoted-printable encoding to plain text. SMTP servers often encode text using quoted-printable format (for instance &#x60;&#x3D;D7&#x60;). This can be a pain for testing (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> GetEmailWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/emails/{emailId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments. Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;AttachmentMetaData&gt;</returns>
        public List<AttachmentMetaData> GetEmailAttachments(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<AttachmentMetaData>> localVarResponse = GetEmailAttachmentsWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments. Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;AttachmentMetaData&gt;</returns>
        public mailslurp.Client.ApiResponse<List<AttachmentMetaData>> GetEmailAttachmentsWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<AttachmentMetaData>>("/emails/{emailId}/attachments", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments. Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;AttachmentMetaData&gt;</returns>
        public async System.Threading.Tasks.Task<List<AttachmentMetaData>> GetEmailAttachmentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<AttachmentMetaData>> localVarResponse = await GetEmailAttachmentsWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all email attachment metadata. Metadata includes name and size of attachments. Returns an array of attachment metadata such as name and content-type for a given email if present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;AttachmentMetaData&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<AttachmentMetaData>>> GetEmailAttachmentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<AttachmentMetaData>>("/emails/{emailId}/attachments", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups. Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailContentMatchResult</returns>
        public EmailContentMatchResult GetEmailContentMatch(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailContentMatchResult> localVarResponse = GetEmailContentMatchWithHttpInfo(emailId, contentMatchOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups. Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailContentMatchResult</returns>
        public mailslurp.Client.ApiResponse<EmailContentMatchResult> GetEmailContentMatchWithHttpInfo(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0)
        {
            // verify the required parameter 'contentMatchOptions' is set
            if (contentMatchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'contentMatchOptions' when calling EmailControllerApi->GetEmailContentMatch");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = contentMatchOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailContentMatch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmailContentMatchResult>("/emails/{emailId}/contentMatch", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailContentMatch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups. Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailContentMatchResult</returns>
        public async System.Threading.Tasks.Task<EmailContentMatchResult> GetEmailContentMatchAsync(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailContentMatchResult> localVarResponse = await GetEmailContentMatchWithHttpInfoAsync(emailId, contentMatchOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content regex pattern match results. Runs regex against email body and returns match groups. Return the matches for a given Java style regex pattern. Do not include the typical &#x60;/&#x60; at start or end of regex in some languages. Given an example &#x60;your code is: 12345&#x60; the pattern to extract match looks like &#x60;code is: (\\d{6})&#x60;. This will return an array of matches with the first matching the entire pattern and the subsequent matching the groups: &#x60;[&#39;code is: 123456&#39;, &#39;123456&#39;]&#x60; See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html for more information of available patterns. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentMatchOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailContentMatchResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailContentMatchResult>> GetEmailContentMatchWithHttpInfoAsync(Guid emailId, ContentMatchOptions contentMatchOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'contentMatchOptions' is set
            if (contentMatchOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'contentMatchOptions' when calling EmailControllerApi->GetEmailContentMatch");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = contentMatchOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailContentMatch";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmailContentMatchResult>("/emails/{emailId}/contentMatch", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailContentMatch", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content part by content type Get email body content parts from a multipart email message for a given content type
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailContentPartResult</returns>
        public EmailContentPartResult GetEmailContentPart(Guid emailId, string contentType, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailContentPartResult> localVarResponse = GetEmailContentPartWithHttpInfo(emailId, contentType);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content part by content type Get email body content parts from a multipart email message for a given content type
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailContentPartResult</returns>
        public mailslurp.Client.ApiResponse<EmailContentPartResult> GetEmailContentPartWithHttpInfo(Guid emailId, string contentType, int operationIndex = 0)
        {
            // verify the required parameter 'contentType' is set
            if (contentType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'contentType' when calling EmailControllerApi->GetEmailContentPart");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType));

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailContentPart";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailContentPartResult>("/emails/{emailId}/contentPart", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailContentPart", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content part by content type Get email body content parts from a multipart email message for a given content type
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailContentPartResult</returns>
        public async System.Threading.Tasks.Task<EmailContentPartResult> GetEmailContentPartAsync(Guid emailId, string contentType, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailContentPartResult> localVarResponse = await GetEmailContentPartWithHttpInfoAsync(emailId, contentType, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content part by content type Get email body content parts from a multipart email message for a given content type
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to match against</param>
        /// <param name="contentType">Content type</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailContentPartResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailContentPartResult>> GetEmailContentPartWithHttpInfoAsync(Guid emailId, string contentType, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'contentType' is set
            if (contentType == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'contentType' when calling EmailControllerApi->GetEmailContentPart");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType));

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailContentPart";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailContentPartResult>("/emails/{emailId}/contentPart", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailContentPart", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>CountDto</returns>
        public CountDto GetEmailCount(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = GetEmailCountWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of CountDto</returns>
        public mailslurp.Client.ApiResponse<CountDto> GetEmailCountWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<CountDto>("/emails/emails/count", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of CountDto</returns>
        public async System.Threading.Tasks.Task<CountDto> GetEmailCountAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<CountDto> localVarResponse = await GetEmailCountWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email count 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (CountDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<CountDto>> GetEmailCountWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<CountDto>("/emails/emails/count", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context. Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>string</returns>
        public string GetEmailHTML(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = GetEmailHTMLWithHttpInfo(emailId, decode, replaceCidImages);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context. Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of string</returns>
        public mailslurp.Client.ApiResponse<string> GetEmailHTMLWithHttpInfo(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html;charset=utf-8",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }
            if (replaceCidImages != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "replaceCidImages", replaceCidImages));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTML";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<string>("/emails/{emailId}/html", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTML", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context. Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of string</returns>
        public async System.Threading.Tasks.Task<string> GetEmailHTMLAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<string> localVarResponse = await GetEmailHTMLWithHttpInfoAsync(emailId, decode, replaceCidImages, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content as HTML. For displaying emails in browser context. Retrieve email content as HTML response for viewing in browsers. Decodes quoted-printable entities and converts charset to UTF-8. Pass your API KEY as a request parameter when viewing in a browser: &#x60;?apiKey&#x3D;xxx&#x60;. Returns content-type &#x60;text/html;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON. For JSON response see the &#x60;getEmailHTMLJson&#x60; method.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (string)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<string>> GetEmailHTMLWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "text/html;charset=utf-8",
                "text/html"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }
            if (replaceCidImages != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "replaceCidImages", replaceCidImages));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTML";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<string>("/emails/{emailId}/html", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTML", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailHtmlDto</returns>
        public EmailHtmlDto GetEmailHTMLJson(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailHtmlDto> localVarResponse = GetEmailHTMLJsonWithHttpInfo(emailId, decode, replaceCidImages);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailHtmlDto</returns>
        public mailslurp.Client.ApiResponse<EmailHtmlDto> GetEmailHTMLJsonWithHttpInfo(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }
            if (replaceCidImages != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "replaceCidImages", replaceCidImages));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTMLJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailHtmlDto>("/emails/{emailId}/html/json", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTMLJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailHtmlDto</returns>
        public async System.Threading.Tasks.Task<EmailHtmlDto> GetEmailHTMLJsonAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailHtmlDto> localVarResponse = await GetEmailHTMLJsonWithHttpInfoAsync(emailId, decode, replaceCidImages, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email content as HTML in JSON wrapper. For fetching entity decoded HTML content Retrieve email content as HTML response. Decodes quoted-printable entities and converts charset to UTF-8. Returns content-type &#x60;application/json;charset&#x3D;utf-8&#x60; so you must call expecting that content response not JSON.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="decode"> (optional, default to false)</param>
        /// <param name="replaceCidImages"> (optional, default to false)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailHtmlDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailHtmlDto>> GetEmailHTMLJsonWithHttpInfoAsync(Guid emailId, bool? decode = default(bool?), bool? replaceCidImages = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decode != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decode", decode));
            }
            if (replaceCidImages != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "replaceCidImages", replaceCidImages));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTMLJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailHtmlDto>("/emails/{emailId}/html/json", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTMLJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailTextLinesResult</returns>
        public EmailTextLinesResult GetEmailHTMLQuery(Guid emailId, string htmlSelector, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailTextLinesResult> localVarResponse = GetEmailHTMLQueryWithHttpInfo(emailId, htmlSelector);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailTextLinesResult</returns>
        public mailslurp.Client.ApiResponse<EmailTextLinesResult> GetEmailHTMLQueryWithHttpInfo(Guid emailId, string htmlSelector, int operationIndex = 0)
        {
            // verify the required parameter 'htmlSelector' is set
            if (htmlSelector == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'htmlSelector' when calling EmailControllerApi->GetEmailHTMLQuery");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "htmlSelector", htmlSelector));

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTMLQuery";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailTextLinesResult>("/emails/{emailId}/htmlQuery", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTMLQuery", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailTextLinesResult</returns>
        public async System.Threading.Tasks.Task<EmailTextLinesResult> GetEmailHTMLQueryAsync(Guid emailId, string htmlSelector, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailTextLinesResult> localVarResponse = await GetEmailHTMLQueryWithHttpInfoAsync(emailId, htmlSelector, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of text. HTML parsing uses JSoup which supports JQuery/CSS style selectors
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to perform HTML query on</param>
        /// <param name="htmlSelector">HTML selector to search for. Uses JQuery/JSoup/CSS style selector like &#39;.my-div&#39; to match content. See https://jsoup.org/apidocs/org/jsoup/select/Selector.html for more information.</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailTextLinesResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailTextLinesResult>> GetEmailHTMLQueryWithHttpInfoAsync(Guid emailId, string htmlSelector, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'htmlSelector' is set
            if (htmlSelector == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'htmlSelector' when calling EmailControllerApi->GetEmailHTMLQuery");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "htmlSelector", htmlSelector));

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailHTMLQuery";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailTextLinesResult>("/emails/{emailId}/htmlQuery", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailHTMLQuery", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content) HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailLinksResult</returns>
        public EmailLinksResult GetEmailLinks(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailLinksResult> localVarResponse = GetEmailLinksWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content) HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailLinksResult</returns>
        public mailslurp.Client.ApiResponse<EmailLinksResult> GetEmailLinksWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailLinks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailLinksResult>("/emails/{emailId}/links", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailLinks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content) HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailLinksResult</returns>
        public async System.Threading.Tasks.Task<EmailLinksResult> GetEmailLinksAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailLinksResult> localVarResponse = await GetEmailLinksWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return list of links found in an email (only works for HTML content) HTML parsing uses JSoup and UNIX line separators. Searches content for href attributes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailLinksResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailLinksResult>> GetEmailLinksWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailLinks";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailLinksResult>("/emails/{emailId}/links", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailLinks", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email URLs for viewing in browser or downloading Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreviewUrls</returns>
        public EmailPreviewUrls GetEmailPreviewURLs(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailPreviewUrls> localVarResponse = GetEmailPreviewURLsWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email URLs for viewing in browser or downloading Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreviewUrls</returns>
        public mailslurp.Client.ApiResponse<EmailPreviewUrls> GetEmailPreviewURLsWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailPreviewURLs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailPreviewUrls>("/emails/{emailId}/urls", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailPreviewURLs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email URLs for viewing in browser or downloading Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreviewUrls</returns>
        public async System.Threading.Tasks.Task<EmailPreviewUrls> GetEmailPreviewURLsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailPreviewUrls> localVarResponse = await GetEmailPreviewURLsWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email URLs for viewing in browser or downloading Get a list of URLs for email content as text/html or raw SMTP message for viewing the message in a browser.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreviewUrls)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailPreviewUrls>> GetEmailPreviewURLsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailPreviewURLs";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailPreviewUrls>("/emails/{emailId}/urls", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailPreviewURLs", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailScreenshotResult</returns>
        public EmailScreenshotResult GetEmailScreenshotAsBase64(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailScreenshotResult> localVarResponse = GetEmailScreenshotAsBase64WithHttpInfo(emailId, getEmailScreenshotOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailScreenshotResult</returns>
        public mailslurp.Client.ApiResponse<EmailScreenshotResult> GetEmailScreenshotAsBase64WithHttpInfo(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0)
        {
            // verify the required parameter 'getEmailScreenshotOptions' is set
            if (getEmailScreenshotOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'getEmailScreenshotOptions' when calling EmailControllerApi->GetEmailScreenshotAsBase64");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = getEmailScreenshotOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailScreenshotAsBase64";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<EmailScreenshotResult>("/emails/{emailId}/screenshot/base64", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailScreenshotAsBase64", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailScreenshotResult</returns>
        public async System.Threading.Tasks.Task<EmailScreenshotResult> GetEmailScreenshotAsBase64Async(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailScreenshotResult> localVarResponse = await GetEmailScreenshotAsBase64WithHttpInfoAsync(emailId, getEmailScreenshotOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser and return base64 encoded string Capture image of email screenshot and return as base64 encoded string. Useful for embedding in HTML. Be careful as this may contain sensitive information.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailScreenshotResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailScreenshotResult>> GetEmailScreenshotAsBase64WithHttpInfoAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'getEmailScreenshotOptions' is set
            if (getEmailScreenshotOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'getEmailScreenshotOptions' when calling EmailControllerApi->GetEmailScreenshotAsBase64");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = getEmailScreenshotOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailScreenshotAsBase64";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<EmailScreenshotResult>("/emails/{emailId}/screenshot/base64", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailScreenshotAsBase64", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser Returns binary octet-stream of screenshot of the given email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void GetEmailScreenshotAsBinary(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0)
        {
            GetEmailScreenshotAsBinaryWithHttpInfo(emailId, getEmailScreenshotOptions);
        }

        /// <summary>
        /// Take a screenshot of an email in a browser Returns binary octet-stream of screenshot of the given email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> GetEmailScreenshotAsBinaryWithHttpInfo(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0)
        {
            // verify the required parameter 'getEmailScreenshotOptions' is set
            if (getEmailScreenshotOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'getEmailScreenshotOptions' when calling EmailControllerApi->GetEmailScreenshotAsBinary");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = getEmailScreenshotOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailScreenshotAsBinary";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/emails/{emailId}/screenshot/binary", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailScreenshotAsBinary", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Take a screenshot of an email in a browser Returns binary octet-stream of screenshot of the given email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task GetEmailScreenshotAsBinaryAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await GetEmailScreenshotAsBinaryWithHttpInfoAsync(emailId, getEmailScreenshotOptions, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Take a screenshot of an email in a browser Returns binary octet-stream of screenshot of the given email
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="getEmailScreenshotOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> GetEmailScreenshotAsBinaryWithHttpInfoAsync(Guid emailId, GetEmailScreenshotOptions getEmailScreenshotOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'getEmailScreenshotOptions' is set
            if (getEmailScreenshotOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'getEmailScreenshotOptions' when calling EmailControllerApi->GetEmailScreenshotAsBinary");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = getEmailScreenshotOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailScreenshotAsBinary";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/emails/{emailId}/screenshot/binary", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailScreenshotAsBinary", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailTextLinesResult</returns>
        public EmailTextLinesResult GetEmailTextLines(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailTextLinesResult> localVarResponse = GetEmailTextLinesWithHttpInfo(emailId, decodeHtmlEntities, lineSeparator);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailTextLinesResult</returns>
        public mailslurp.Client.ApiResponse<EmailTextLinesResult> GetEmailTextLinesWithHttpInfo(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decodeHtmlEntities != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decodeHtmlEntities", decodeHtmlEntities));
            }
            if (lineSeparator != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "lineSeparator", lineSeparator));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailTextLines";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<EmailTextLinesResult>("/emails/{emailId}/textLines", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailTextLines", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailTextLinesResult</returns>
        public async System.Threading.Tasks.Task<EmailTextLinesResult> GetEmailTextLinesAsync(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailTextLinesResult> localVarResponse = await GetEmailTextLinesWithHttpInfoAsync(emailId, decodeHtmlEntities, lineSeparator, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Parse and return text from an email, stripping HTML and decoding encoded characters Parse an email body and return the content as an array of strings. HTML parsing uses JSoup and UNIX line separators.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email to fetch text for</param>
        /// <param name="decodeHtmlEntities">Decode HTML entities (optional)</param>
        /// <param name="lineSeparator">Line separator character (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailTextLinesResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailTextLinesResult>> GetEmailTextLinesWithHttpInfoAsync(Guid emailId, bool? decodeHtmlEntities = default(bool?), string lineSeparator = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (decodeHtmlEntities != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "decodeHtmlEntities", decodeHtmlEntities));
            }
            if (lineSeparator != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "lineSeparator", lineSeparator));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailTextLines";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<EmailTextLinesResult>("/emails/{emailId}/textLines", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailTextLines", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        public PageEmailProjection GetEmailsOffsetPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = GetEmailsOffsetPaginatedWithHttpInfo(inboxId, page, size, sort, unreadOnly, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageEmailProjection> GetEmailsOffsetPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailsOffsetPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailProjection>("/emails/offset-paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailsOffsetPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageEmailProjection> GetEmailsOffsetPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = await GetEmailsOffsetPaginatedWithHttpInfoAsync(inboxId, page, size, sort, unreadOnly, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailProjection>> GetEmailsOffsetPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailsOffsetPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailProjection>("/emails/offset-paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailsOffsetPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        public PageEmailProjection GetEmailsPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = GetEmailsPaginatedWithHttpInfo(inboxId, page, size, sort, unreadOnly, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageEmailProjection> GetEmailsPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailProjection>("/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageEmailProjection> GetEmailsPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = await GetEmailsPaginatedWithHttpInfoAsync(inboxId, page, size, sort, unreadOnly, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails in all inboxes in paginated form. Email API list all. By default returns all emails across all inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter. Searches email recipients, sender, subject, email address and ID. Does not search email body (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailProjection>> GetEmailsPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailProjection>("/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get gravatar url for email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>GravatarUrl</returns>
        public GravatarUrl GetGravatarUrlForEmailAddress(string emailAddress, string size = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<GravatarUrl> localVarResponse = GetGravatarUrlForEmailAddressWithHttpInfo(emailAddress, size);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get gravatar url for email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of GravatarUrl</returns>
        public mailslurp.Client.ApiResponse<GravatarUrl> GetGravatarUrlForEmailAddressWithHttpInfo(string emailAddress, string size = default(string), int operationIndex = 0)
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling EmailControllerApi->GetGravatarUrlForEmailAddress");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetGravatarUrlForEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<GravatarUrl>("/emails/gravatarFor", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGravatarUrlForEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        ///  Get gravatar url for email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of GravatarUrl</returns>
        public async System.Threading.Tasks.Task<GravatarUrl> GetGravatarUrlForEmailAddressAsync(string emailAddress, string size = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<GravatarUrl> localVarResponse = await GetGravatarUrlForEmailAddressWithHttpInfoAsync(emailAddress, size, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        ///  Get gravatar url for email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailAddress"></param>
        /// <param name="size"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (GravatarUrl)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<GravatarUrl>> GetGravatarUrlForEmailAddressWithHttpInfoAsync(string emailAddress, string size = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'emailAddress' is set
            if (emailAddress == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'emailAddress' when calling EmailControllerApi->GetGravatarUrlForEmailAddress");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetGravatarUrlForEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<GravatarUrl>("/emails/gravatarFor", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetGravatarUrlForEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in all inboxes. Most recently received. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email GetLatestEmail(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = GetLatestEmailWithHttpInfo(inboxIds);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in all inboxes. Most recently received. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> GetLatestEmailWithHttpInfo(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxIds != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxIds", inboxIds));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetLatestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/emails/latest", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in all inboxes. Most recently received. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> GetLatestEmailAsync(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await GetLatestEmailWithHttpInfoAsync(inboxIds, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in all inboxes. Most recently received. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxIds">Optional set of inboxes to filter by. Only get the latest email from these inbox IDs. If not provided will search across all inboxes (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> GetLatestEmailWithHttpInfoAsync(List<Guid> inboxIds = default(List<Guid>), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxIds != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxIds", inboxIds));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetLatestEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/emails/latest", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Email</returns>
        public Email GetLatestEmailInInbox1(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = GetLatestEmailInInbox1WithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Email</returns>
        public mailslurp.Client.ApiResponse<Email> GetLatestEmailInInbox1WithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "EmailControllerApi.GetLatestEmailInInbox1";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Email>("/emails/latestIn", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmailInInbox1", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Email</returns>
        public async System.Threading.Tasks.Task<Email> GetLatestEmailInInbox1Async(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Email> localVarResponse = await GetLatestEmailInInbox1WithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get latest email in an inbox. Use &#x60;WaitForController&#x60; to get emails that may not have arrived yet. Get the newest email in all inboxes or in a passed set of inbox IDs
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">ID of the inbox you want to get the latest email from</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Email)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Email>> GetLatestEmailInInbox1WithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "EmailControllerApi.GetLatestEmailInInbox1";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Email>("/emails/latestIn", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetLatestEmailInInbox1", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        public PageEmailProjection GetOrganizationEmailsPaginated(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = GetOrganizationEmailsPaginatedWithHttpInfo(inboxId, page, size, sort, unreadOnly, searchFilter, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageEmailProjection> GetOrganizationEmailsPaginatedWithHttpInfo(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetOrganizationEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailProjection>("/emails/organization", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetOrganizationEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageEmailProjection> GetOrganizationEmailsPaginatedAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = await GetOrganizationEmailsPaginatedWithHttpInfoAsync(inboxId, page, size, sort, unreadOnly, searchFilter, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all organization emails. List team or shared test email accounts By default returns all emails across all team inboxes sorted by ascending created at date. Responses are paginated. You can restrict results to a list of inbox IDs. You can also filter out read messages
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ids to filter by. Can be repeated. By default will use all inboxes belonging to your account. (optional)</param>
        /// <param name="page">Optional page index in email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in email list pagination. Maximum size is 100. Use page index and sort to page through larger results (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="unreadOnly">Optional filter for unread emails only. All emails are considered unread until they are viewed in the dashboard or requested directly (optional, default to false)</param>
        /// <param name="searchFilter">Optional search filter search filter for emails. (optional)</param>
        /// <param name="since">Optional filter emails received after given date time. If unset will use time 24hours prior to now. (optional)</param>
        /// <param name="before">Optional filter emails received before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailProjection>> GetOrganizationEmailsPaginatedWithHttpInfoAsync(List<Guid> inboxId = default(List<Guid>), int? page = default(int?), int? size = default(int?), string sort = default(string), bool? unreadOnly = default(bool?), string searchFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "inboxId", inboxId));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (unreadOnly != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "unreadOnly", unreadOnly));
            }
            if (searchFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "searchFilter", searchFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetOrganizationEmailsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailProjection>("/emails/organization", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetOrganizationEmailsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void GetRawEmailContents(Guid emailId, int operationIndex = 0)
        {
            GetRawEmailContentsWithHttpInfo(emailId);
        }

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> GetRawEmailContentsWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetRawEmailContents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Object>("/emails/{emailId}/raw", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawEmailContents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task GetRawEmailContentsAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await GetRawEmailContentsWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Get raw email string. Returns unparsed raw SMTP message with headers and body. Returns a raw, unparsed, and unprocessed email. If your client has issues processing the response it is likely due to the response content-type which is text/plain. If you need a JSON response content-type use the getRawEmailJson endpoint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> GetRawEmailContentsWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetRawEmailContents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Object>("/emails/{emailId}/raw", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawEmailContents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>RawEmailJson</returns>
        public RawEmailJson GetRawEmailJson(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<RawEmailJson> localVarResponse = GetRawEmailJsonWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of RawEmailJson</returns>
        public mailslurp.Client.ApiResponse<RawEmailJson> GetRawEmailJsonWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetRawEmailJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<RawEmailJson>("/emails/{emailId}/raw/json", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawEmailJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of RawEmailJson</returns>
        public async System.Threading.Tasks.Task<RawEmailJson> GetRawEmailJsonAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<RawEmailJson> localVarResponse = await GetRawEmailJsonWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get raw email in JSON. Unparsed SMTP message in JSON wrapper format. Returns a raw, unparsed, and unprocessed email wrapped in a JSON response object for easier handling when compared with the getRawEmail text/plain response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (RawEmailJson)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<RawEmailJson>> GetRawEmailJsonWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.GetRawEmailJson";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<RawEmailJson>("/emails/{emailId}/raw/json", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetRawEmailJson", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get unread email count Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>UnreadCount</returns>
        public UnreadCount GetUnreadEmailCount(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<UnreadCount> localVarResponse = GetUnreadEmailCountWithHttpInfo(inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get unread email count Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of UnreadCount</returns>
        public mailslurp.Client.ApiResponse<UnreadCount> GetUnreadEmailCountWithHttpInfo(Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetUnreadEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<UnreadCount>("/emails/unreadCount", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUnreadEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get unread email count Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of UnreadCount</returns>
        public async System.Threading.Tasks.Task<UnreadCount> GetUnreadEmailCountAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<UnreadCount> localVarResponse = await GetUnreadEmailCountWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get unread email count Get number of emails unread. Unread means has not been viewed in dashboard or returned in an email API response
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (UnreadCount)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<UnreadCount>> GetUnreadEmailCountWithHttpInfoAsync(Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.GetUnreadEmailCount";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<UnreadCount>("/emails/unreadCount", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetUnreadEmailCount", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Mark all emails as read or unread Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void MarkAllAsRead(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            MarkAllAsReadWithHttpInfo(read, inboxId);
        }

        /// <summary>
        /// Mark all emails as read or unread Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> MarkAllAsReadWithHttpInfo(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (read != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "read", read));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.MarkAllAsRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<Object>("/emails/read", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("MarkAllAsRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Mark all emails as read or unread Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task MarkAllAsReadAsync(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await MarkAllAsReadWithHttpInfoAsync(read, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Mark all emails as read or unread Marks all emails as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="inboxId">Optional inbox ID filter (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> MarkAllAsReadWithHttpInfoAsync(bool? read = default(bool?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (read != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "read", read));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.MarkAllAsRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<Object>("/emails/read", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("MarkAllAsRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Mark an email as read or unread Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>EmailPreview</returns>
        public EmailPreview MarkAsRead(Guid emailId, bool? read = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<EmailPreview> localVarResponse = MarkAsReadWithHttpInfo(emailId, read);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Mark an email as read or unread Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of EmailPreview</returns>
        public mailslurp.Client.ApiResponse<EmailPreview> MarkAsReadWithHttpInfo(Guid emailId, bool? read = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (read != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "read", read));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.MarkAsRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Patch<EmailPreview>("/emails/{emailId}/read", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("MarkAsRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Mark an email as read or unread Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of EmailPreview</returns>
        public async System.Threading.Tasks.Task<EmailPreview> MarkAsReadAsync(Guid emailId, bool? read = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<EmailPreview> localVarResponse = await MarkAsReadWithHttpInfoAsync(emailId, read, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Mark an email as read or unread Marks an email as read or unread. Pass boolean read flag to set value. This is useful if you want to read an email but keep it as unread
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId"></param>
        /// <param name="read">What value to assign to email read property. Default true. (optional, default to true)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (EmailPreview)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<EmailPreview>> MarkAsReadWithHttpInfoAsync(Guid emailId, bool? read = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            if (read != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "read", read));
            }

            localVarRequestOptions.Operation = "EmailControllerApi.MarkAsRead";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PatchAsync<EmailPreview>("/emails/{emailId}/read", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("MarkAsRead", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto ReplyToEmail(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = ReplyToEmailWithHttpInfo(emailId, replyToEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> ReplyToEmailWithHttpInfo(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'replyToEmailOptions' is set
            if (replyToEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'replyToEmailOptions' when calling EmailControllerApi->ReplyToEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = replyToEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ReplyToEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<SentEmailDto>("/emails/{emailId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> ReplyToEmailAsync(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await ReplyToEmailWithHttpInfoAsync(emailId, replyToEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> ReplyToEmailWithHttpInfoAsync(Guid emailId, ReplyToEmailOptions replyToEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'replyToEmailOptions' is set
            if (replyToEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'replyToEmailOptions' when calling EmailControllerApi->ReplyToEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = replyToEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.ReplyToEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<SentEmailDto>("/emails/{emailId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form. Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        public PageEmailProjection SearchEmails(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = SearchEmailsWithHttpInfo(searchEmailsOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form. Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageEmailProjection> SearchEmailsWithHttpInfo(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0)
        {
            // verify the required parameter 'searchEmailsOptions' is set
            if (searchEmailsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'searchEmailsOptions' when calling EmailControllerApi->SearchEmails");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = searchEmailsOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.SearchEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<PageEmailProjection>("/emails/search", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SearchEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form. Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageEmailProjection> SearchEmailsAsync(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = await SearchEmailsWithHttpInfoAsync(searchEmailsOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all emails by search criteria. Return in paginated form. Search emails by given criteria return matches in paginated format. Searches against email recipients, sender, subject, email address and ID. Does not search email body
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="searchEmailsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailProjection>> SearchEmailsWithHttpInfoAsync(SearchEmailsOptions searchEmailsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'searchEmailsOptions' is set
            if (searchEmailsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'searchEmailsOptions' when calling EmailControllerApi->SearchEmails");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = searchEmailsOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.SearchEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<PageEmailProjection>("/emails/search", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SearchEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendEmailSourceOptional(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0)
        {
            SendEmailSourceOptionalWithHttpInfo(sendEmailOptions, inboxId, useDomainPool, virtualSend);
        }

        /// <summary>
        /// Send email Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendEmailSourceOptionalWithHttpInfo(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling EmailControllerApi->SendEmailSourceOptional");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (virtualSend != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualSend", virtualSend));
            }
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.SendEmailSourceOptional";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailSourceOptional", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send email Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendEmailSourceOptionalAsync(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendEmailSourceOptionalWithHttpInfoAsync(sendEmailOptions, inboxId, useDomainPool, virtualSend, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send email Alias for &#x60;InboxController.sendEmail&#x60; method - see original method for full details. Sends an email from a given inbox that you have created. If no inbox is supplied a random inbox will be created for you and used to send the email.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendEmailOptions"></param>
        /// <param name="inboxId">ID of the inbox you want to send the email from (optional)</param>
        /// <param name="useDomainPool">Use domain pool. Optionally create inbox to send from using the mailslurp domain pool. (optional)</param>
        /// <param name="virtualSend">Optionally create inbox to send from that is a virtual inbox and won&#39;t send to external addresses (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendEmailSourceOptionalWithHttpInfoAsync(SendEmailOptions sendEmailOptions, Guid? inboxId = default(Guid?), bool? useDomainPool = default(bool?), bool? virtualSend = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling EmailControllerApi->SendEmailSourceOptional");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (virtualSend != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualSend", virtualSend));
            }
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "EmailControllerApi.SendEmailSourceOptional";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailSourceOptional", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate email HTML contents Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ValidationDto</returns>
        public ValidationDto ValidateEmail(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ValidationDto> localVarResponse = ValidateEmailWithHttpInfo(emailId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate email HTML contents Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ValidationDto</returns>
        public mailslurp.Client.ApiResponse<ValidationDto> ValidateEmailWithHttpInfo(Guid emailId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.ValidateEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ValidationDto>("/emails/{emailId}/validate", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ValidateEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Validate email HTML contents Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ValidationDto</returns>
        public async System.Threading.Tasks.Task<ValidationDto> ValidateEmailAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ValidationDto> localVarResponse = await ValidateEmailWithHttpInfoAsync(emailId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Validate email HTML contents Validate the HTML content of email if HTML is found. Considered valid if no HTML is present.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="emailId">ID of email</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ValidationDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ValidationDto>> ValidateEmailWithHttpInfoAsync(Guid emailId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter

            localVarRequestOptions.Operation = "EmailControllerApi.ValidateEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ValidationDto>("/emails/{emailId}/validate", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ValidateEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/DomainControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IDomainControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Add catch all wild card inbox to domain
        /// </summary>
        /// <remarks>
        /// Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        DomainDto AddDomainWildcardCatchAll(Guid id, int operationIndex = 0);

        /// <summary>
        /// Add catch all wild card inbox to domain
        /// </summary>
        /// <remarks>
        /// Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        ApiResponse<DomainDto> AddDomainWildcardCatchAllWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Create Domain
        /// </summary>
        /// <remarks>
        /// Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        DomainDto CreateDomain(CreateDomainOptions createDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Create Domain
        /// </summary>
        /// <remarks>
        /// Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        ApiResponse<DomainDto> CreateDomainWithHttpInfo(CreateDomainOptions createDomainOptions, int operationIndex = 0);
        /// <summary>
        /// Delete a domain
        /// </summary>
        /// <remarks>
        /// Delete a domain. This will disable any existing inboxes that use this domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        List<string> DeleteDomain(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete a domain
        /// </summary>
        /// <remarks>
        /// Delete a domain. This will disable any existing inboxes that use this domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        ApiResponse<List<string>> DeleteDomainWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get all usable domains
        /// </summary>
        /// <remarks>
        /// List all domains available for use with email address creation
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainGroupsDto</returns>
        DomainGroupsDto GetAvailableDomains(string inboxType = default(string), int operationIndex = 0);

        /// <summary>
        /// Get all usable domains
        /// </summary>
        /// <remarks>
        /// List all domains available for use with email address creation
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainGroupsDto</returns>
        ApiResponse<DomainGroupsDto> GetAvailableDomainsWithHttpInfo(string inboxType = default(string), int operationIndex = 0);
        /// <summary>
        /// Get a domain
        /// </summary>
        /// <remarks>
        /// Returns domain verification status and tokens for a given domain
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        DomainDto GetDomain(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0);

        /// <summary>
        /// Get a domain
        /// </summary>
        /// <remarks>
        /// Returns domain verification status and tokens for a given domain
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        ApiResponse<DomainDto> GetDomainWithHttpInfo(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0);
        /// <summary>
        /// Get domain issues
        /// </summary>
        /// <remarks>
        /// List domain issues for domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainIssuesDto</returns>
        DomainIssuesDto GetDomainIssues(int operationIndex = 0);

        /// <summary>
        /// Get domain issues
        /// </summary>
        /// <remarks>
        /// List domain issues for domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainIssuesDto</returns>
        ApiResponse<DomainIssuesDto> GetDomainIssuesWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get catch all wild card inbox for domain
        /// </summary>
        /// <remarks>
        /// Get the catch all inbox for a domain for missed emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto GetDomainWildcardCatchAllInbox(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get catch all wild card inbox for domain
        /// </summary>
        /// <remarks>
        /// Get the catch all inbox for a domain for missed emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> GetDomainWildcardCatchAllInboxWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get domains
        /// </summary>
        /// <remarks>
        /// List all custom domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;DomainPreview&gt;</returns>
        List<DomainPreview> GetDomains(int operationIndex = 0);

        /// <summary>
        /// Get domains
        /// </summary>
        /// <remarks>
        /// List all custom domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;DomainPreview&gt;</returns>
        ApiResponse<List<DomainPreview>> GetDomainsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get MailSlurp domains
        /// </summary>
        /// <remarks>
        /// List all MailSlurp domains used with non-custom email addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainGroupsDto</returns>
        DomainGroupsDto GetMailSlurpDomains(string inboxType = default(string), int operationIndex = 0);

        /// <summary>
        /// Get MailSlurp domains
        /// </summary>
        /// <remarks>
        /// List all MailSlurp domains used with non-custom email addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainGroupsDto</returns>
        ApiResponse<DomainGroupsDto> GetMailSlurpDomainsWithHttpInfo(string inboxType = default(string), int operationIndex = 0);
        /// <summary>
        /// Update a domain
        /// </summary>
        /// <remarks>
        /// Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        DomainDto UpdateDomain(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0);

        /// <summary>
        /// Update a domain
        /// </summary>
        /// <remarks>
        /// Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        ApiResponse<DomainDto> UpdateDomainWithHttpInfo(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IDomainControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Add catch all wild card inbox to domain
        /// </summary>
        /// <remarks>
        /// Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        System.Threading.Tasks.Task<DomainDto> AddDomainWildcardCatchAllAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Add catch all wild card inbox to domain
        /// </summary>
        /// <remarks>
        /// Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainDto>> AddDomainWildcardCatchAllWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create Domain
        /// </summary>
        /// <remarks>
        /// Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        System.Threading.Tasks.Task<DomainDto> CreateDomainAsync(CreateDomainOptions createDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create Domain
        /// </summary>
        /// <remarks>
        /// Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainDto>> CreateDomainWithHttpInfoAsync(CreateDomainOptions createDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete a domain
        /// </summary>
        /// <remarks>
        /// Delete a domain. This will disable any existing inboxes that use this domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        System.Threading.Tasks.Task<List<string>> DeleteDomainAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete a domain
        /// </summary>
        /// <remarks>
        /// Delete a domain. This will disable any existing inboxes that use this domain.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<string>>> DeleteDomainWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all usable domains
        /// </summary>
        /// <remarks>
        /// List all domains available for use with email address creation
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainGroupsDto</returns>
        System.Threading.Tasks.Task<DomainGroupsDto> GetAvailableDomainsAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all usable domains
        /// </summary>
        /// <remarks>
        /// List all domains available for use with email address creation
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainGroupsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainGroupsDto>> GetAvailableDomainsWithHttpInfoAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a domain
        /// </summary>
        /// <remarks>
        /// Returns domain verification status and tokens for a given domain
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        System.Threading.Tasks.Task<DomainDto> GetDomainAsync(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a domain
        /// </summary>
        /// <remarks>
        /// Returns domain verification status and tokens for a given domain
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainDto>> GetDomainWithHttpInfoAsync(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get domain issues
        /// </summary>
        /// <remarks>
        /// List domain issues for domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainIssuesDto</returns>
        System.Threading.Tasks.Task<DomainIssuesDto> GetDomainIssuesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get domain issues
        /// </summary>
        /// <remarks>
        /// List domain issues for domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainIssuesDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainIssuesDto>> GetDomainIssuesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get catch all wild card inbox for domain
        /// </summary>
        /// <remarks>
        /// Get the catch all inbox for a domain for missed emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> GetDomainWildcardCatchAllInboxAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get catch all wild card inbox for domain
        /// </summary>
        /// <remarks>
        /// Get the catch all inbox for a domain for missed emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> GetDomainWildcardCatchAllInboxWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get domains
        /// </summary>
        /// <remarks>
        /// List all custom domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;DomainPreview&gt;</returns>
        System.Threading.Tasks.Task<List<DomainPreview>> GetDomainsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get domains
        /// </summary>
        /// <remarks>
        /// List all custom domains you have created
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;DomainPreview&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<DomainPreview>>> GetDomainsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get MailSlurp domains
        /// </summary>
        /// <remarks>
        /// List all MailSlurp domains used with non-custom email addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainGroupsDto</returns>
        System.Threading.Tasks.Task<DomainGroupsDto> GetMailSlurpDomainsAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get MailSlurp domains
        /// </summary>
        /// <remarks>
        /// List all MailSlurp domains used with non-custom email addresses
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainGroupsDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainGroupsDto>> GetMailSlurpDomainsWithHttpInfoAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update a domain
        /// </summary>
        /// <remarks>
        /// Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        System.Threading.Tasks.Task<DomainDto> UpdateDomainAsync(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update a domain
        /// </summary>
        /// <remarks>
        /// Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DomainDto>> UpdateDomainWithHttpInfoAsync(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IDomainControllerApi : IDomainControllerApiSync, IDomainControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="DomainControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public DomainControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DomainControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public DomainControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DomainControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public DomainControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DomainControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public DomainControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Add catch all wild card inbox to domain Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        public DomainDto AddDomainWildcardCatchAll(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = AddDomainWildcardCatchAllWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Add catch all wild card inbox to domain Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        public mailslurp.Client.ApiResponse<DomainDto> AddDomainWildcardCatchAllWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.AddDomainWildcardCatchAll";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<DomainDto>("/domains/{id}/wildcard", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("AddDomainWildcardCatchAll", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Add catch all wild card inbox to domain Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        public async System.Threading.Tasks.Task<DomainDto> AddDomainWildcardCatchAllAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = await AddDomainWildcardCatchAllWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Add catch all wild card inbox to domain Add a catch all inbox to a domain so that any emails sent to it that cannot be matched will be sent to the catch all inbox generated
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainDto>> AddDomainWildcardCatchAllWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.AddDomainWildcardCatchAll";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<DomainDto>("/domains/{id}/wildcard", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("AddDomainWildcardCatchAll", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create Domain Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        public DomainDto CreateDomain(CreateDomainOptions createDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = CreateDomainWithHttpInfo(createDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create Domain Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        public mailslurp.Client.ApiResponse<DomainDto> CreateDomainWithHttpInfo(CreateDomainOptions createDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createDomainOptions' is set
            if (createDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createDomainOptions' when calling DomainControllerApi->CreateDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createDomainOptions;

            localVarRequestOptions.Operation = "DomainControllerApi.CreateDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<DomainDto>("/domains", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create Domain Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        public async System.Threading.Tasks.Task<DomainDto> CreateDomainAsync(CreateDomainOptions createDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = await CreateDomainWithHttpInfoAsync(createDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create Domain Link a domain that you own with MailSlurp so you can create email addresses using it. Endpoint returns DNS records used for validation. You must add these verification records to your host provider&#39;s DNS setup to verify the domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainDto>> CreateDomainWithHttpInfoAsync(CreateDomainOptions createDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createDomainOptions' is set
            if (createDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createDomainOptions' when calling DomainControllerApi->CreateDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createDomainOptions;

            localVarRequestOptions.Operation = "DomainControllerApi.CreateDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<DomainDto>("/domains", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a domain Delete a domain. This will disable any existing inboxes that use this domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        public List<string> DeleteDomain(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = DeleteDomainWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Delete a domain Delete a domain. This will disable any existing inboxes that use this domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        public mailslurp.Client.ApiResponse<List<string>> DeleteDomainWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.DeleteDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<List<string>>("/domains/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete a domain Delete a domain. This will disable any existing inboxes that use this domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        public async System.Threading.Tasks.Task<List<string>> DeleteDomainAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = await DeleteDomainWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Delete a domain Delete a domain. This will disable any existing inboxes that use this domain.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<string>>> DeleteDomainWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.DeleteDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<List<string>>("/domains/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all usable domains List all domains available for use with email address creation
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainGroupsDto</returns>
        public DomainGroupsDto GetAvailableDomains(string inboxType = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainGroupsDto> localVarResponse = GetAvailableDomainsWithHttpInfo(inboxType);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all usable domains List all domains available for use with email address creation
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainGroupsDto</returns>
        public mailslurp.Client.ApiResponse<DomainGroupsDto> GetAvailableDomainsWithHttpInfo(string inboxType = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetAvailableDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DomainGroupsDto>("/domains/available-domains", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAvailableDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all usable domains List all domains available for use with email address creation
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainGroupsDto</returns>
        public async System.Threading.Tasks.Task<DomainGroupsDto> GetAvailableDomainsAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainGroupsDto> localVarResponse = await GetAvailableDomainsWithHttpInfoAsync(inboxType, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all usable domains List all domains available for use with email address creation
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainGroupsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainGroupsDto>> GetAvailableDomainsWithHttpInfoAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetAvailableDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DomainGroupsDto>("/domains/available-domains", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAvailableDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a domain Returns domain verification status and tokens for a given domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        public DomainDto GetDomain(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = GetDomainWithHttpInfo(id, checkForErrors);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a domain Returns domain verification status and tokens for a given domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        public mailslurp.Client.ApiResponse<DomainDto> GetDomainWithHttpInfo(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (checkForErrors != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "checkForErrors", checkForErrors));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DomainDto>("/domains/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a domain Returns domain verification status and tokens for a given domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        public async System.Threading.Tasks.Task<DomainDto> GetDomainAsync(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = await GetDomainWithHttpInfoAsync(id, checkForErrors, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a domain Returns domain verification status and tokens for a given domain
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="checkForErrors"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainDto>> GetDomainWithHttpInfoAsync(Guid id, bool? checkForErrors = default(bool?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (checkForErrors != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "checkForErrors", checkForErrors));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DomainDto>("/domains/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get domain issues List domain issues for domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainIssuesDto</returns>
        public DomainIssuesDto GetDomainIssues(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainIssuesDto> localVarResponse = GetDomainIssuesWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get domain issues List domain issues for domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainIssuesDto</returns>
        public mailslurp.Client.ApiResponse<DomainIssuesDto> GetDomainIssuesWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "DomainControllerApi.GetDomainIssues";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DomainIssuesDto>("/domains/issues", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomainIssues", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get domain issues List domain issues for domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainIssuesDto</returns>
        public async System.Threading.Tasks.Task<DomainIssuesDto> GetDomainIssuesAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainIssuesDto> localVarResponse = await GetDomainIssuesWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get domain issues List domain issues for domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainIssuesDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainIssuesDto>> GetDomainIssuesWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "DomainControllerApi.GetDomainIssues";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DomainIssuesDto>("/domains/issues", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomainIssues", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get catch all wild card inbox for domain Get the catch all inbox for a domain for missed emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto GetDomainWildcardCatchAllInbox(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = GetDomainWildcardCatchAllInboxWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get catch all wild card inbox for domain Get the catch all inbox for a domain for missed emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> GetDomainWildcardCatchAllInboxWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.GetDomainWildcardCatchAllInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<InboxDto>("/domains/{id}/wildcard", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomainWildcardCatchAllInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get catch all wild card inbox for domain Get the catch all inbox for a domain for missed emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> GetDomainWildcardCatchAllInboxAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await GetDomainWildcardCatchAllInboxWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get catch all wild card inbox for domain Get the catch all inbox for a domain for missed emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> GetDomainWildcardCatchAllInboxWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "DomainControllerApi.GetDomainWildcardCatchAllInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<InboxDto>("/domains/{id}/wildcard", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomainWildcardCatchAllInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get domains List all custom domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;DomainPreview&gt;</returns>
        public List<DomainPreview> GetDomains(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<DomainPreview>> localVarResponse = GetDomainsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get domains List all custom domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;DomainPreview&gt;</returns>
        public mailslurp.Client.ApiResponse<List<DomainPreview>> GetDomainsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "DomainControllerApi.GetDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<DomainPreview>>("/domains", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get domains List all custom domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;DomainPreview&gt;</returns>
        public async System.Threading.Tasks.Task<List<DomainPreview>> GetDomainsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<DomainPreview>> localVarResponse = await GetDomainsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get domains List all custom domains you have created
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;DomainPreview&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<DomainPreview>>> GetDomainsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "DomainControllerApi.GetDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<DomainPreview>>("/domains", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get MailSlurp domains List all MailSlurp domains used with non-custom email addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainGroupsDto</returns>
        public DomainGroupsDto GetMailSlurpDomains(string inboxType = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainGroupsDto> localVarResponse = GetMailSlurpDomainsWithHttpInfo(inboxType);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get MailSlurp domains List all MailSlurp domains used with non-custom email addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainGroupsDto</returns>
        public mailslurp.Client.ApiResponse<DomainGroupsDto> GetMailSlurpDomainsWithHttpInfo(string inboxType = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetMailSlurpDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DomainGroupsDto>("/domains/mailslurp-domains", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetMailSlurpDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get MailSlurp domains List all MailSlurp domains used with non-custom email addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainGroupsDto</returns>
        public async System.Threading.Tasks.Task<DomainGroupsDto> GetMailSlurpDomainsAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainGroupsDto> localVarResponse = await GetMailSlurpDomainsWithHttpInfoAsync(inboxType, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get MailSlurp domains List all MailSlurp domains used with non-custom email addresses
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainGroupsDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainGroupsDto>> GetMailSlurpDomainsWithHttpInfoAsync(string inboxType = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }

            localVarRequestOptions.Operation = "DomainControllerApi.GetMailSlurpDomains";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DomainGroupsDto>("/domains/mailslurp-domains", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetMailSlurpDomains", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update a domain Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DomainDto</returns>
        public DomainDto UpdateDomain(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = UpdateDomainWithHttpInfo(id, updateDomainOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update a domain Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DomainDto</returns>
        public mailslurp.Client.ApiResponse<DomainDto> UpdateDomainWithHttpInfo(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0)
        {
            // verify the required parameter 'updateDomainOptions' is set
            if (updateDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateDomainOptions' when calling DomainControllerApi->UpdateDomain");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = updateDomainOptions;

            localVarRequestOptions.Operation = "DomainControllerApi.UpdateDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<DomainDto>("/domains/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update a domain Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DomainDto</returns>
        public async System.Threading.Tasks.Task<DomainDto> UpdateDomainAsync(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DomainDto> localVarResponse = await UpdateDomainWithHttpInfoAsync(id, updateDomainOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update a domain Update values on a domain. Note you cannot change the domain name as it is immutable. Recreate the domain if you need to alter this.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="updateDomainOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DomainDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DomainDto>> UpdateDomainWithHttpInfoAsync(Guid id, UpdateDomainOptions updateDomainOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateDomainOptions' is set
            if (updateDomainOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateDomainOptions' when calling DomainControllerApi->UpdateDomain");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = updateDomainOptions;

            localVarRequestOptions.Operation = "DomainControllerApi.UpdateDomain";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<DomainDto>("/domains/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateDomain", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ContactControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IContactControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create a contact
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ContactDto</returns>
        ContactDto CreateContact(CreateContactOptions createContactOptions, int operationIndex = 0);

        /// <summary>
        /// Create a contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ContactDto</returns>
        ApiResponse<ContactDto> CreateContactWithHttpInfo(CreateContactOptions createContactOptions, int operationIndex = 0);
        /// <summary>
        /// Delete contact
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteContact(Guid contactId, int operationIndex = 0);

        /// <summary>
        /// Delete contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteContactWithHttpInfo(Guid contactId, int operationIndex = 0);
        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageContactProjection</returns>
        PageContactProjection GetAllContacts(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0);

        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageContactProjection</returns>
        ApiResponse<PageContactProjection> GetAllContactsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0);
        /// <summary>
        /// Get contact
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ContactDto</returns>
        ContactDto GetContact(Guid contactId, int operationIndex = 0);

        /// <summary>
        /// Get contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ContactDto</returns>
        ApiResponse<ContactDto> GetContactWithHttpInfo(Guid contactId, int operationIndex = 0);
        /// <summary>
        /// Get contact vCard vcf file
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        [Obsolete]
        void GetContactVCard(Guid contactId, int operationIndex = 0);

        /// <summary>
        /// Get contact vCard vcf file
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        [Obsolete]
        ApiResponse<Object> GetContactVCardWithHttpInfo(Guid contactId, int operationIndex = 0);
        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;ContactProjection&gt;</returns>
        List<ContactProjection> GetContacts(int operationIndex = 0);

        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;ContactProjection&gt;</returns>
        ApiResponse<List<ContactProjection>> GetContactsWithHttpInfo(int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IContactControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create a contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ContactDto</returns>
        System.Threading.Tasks.Task<ContactDto> CreateContactAsync(CreateContactOptions createContactOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create a contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ContactDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ContactDto>> CreateContactWithHttpInfoAsync(CreateContactOptions createContactOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteContactAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteContactWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageContactProjection</returns>
        System.Threading.Tasks.Task<PageContactProjection> GetAllContactsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageContactProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageContactProjection>> GetAllContactsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ContactDto</returns>
        System.Threading.Tasks.Task<ContactDto> GetContactAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get contact
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ContactDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ContactDto>> GetContactWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get contact vCard vcf file
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        [Obsolete]
        System.Threading.Tasks.Task GetContactVCardAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get contact vCard vcf file
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        [Obsolete]
        System.Threading.Tasks.Task<ApiResponse<Object>> GetContactVCardWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;ContactProjection&gt;</returns>
        System.Threading.Tasks.Task<List<ContactProjection>> GetContactsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all contacts
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;ContactProjection&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<ContactProjection>>> GetContactsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IContactControllerApi : IContactControllerApiSync, IContactControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ContactControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ContactControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ContactControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ContactControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ContactControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ContactControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ContactControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ContactControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create a contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ContactDto</returns>
        public ContactDto CreateContact(CreateContactOptions createContactOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ContactDto> localVarResponse = CreateContactWithHttpInfo(createContactOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ContactDto</returns>
        public mailslurp.Client.ApiResponse<ContactDto> CreateContactWithHttpInfo(CreateContactOptions createContactOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createContactOptions' is set
            if (createContactOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createContactOptions' when calling ContactControllerApi->CreateContact");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createContactOptions;

            localVarRequestOptions.Operation = "ContactControllerApi.CreateContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ContactDto>("/contacts", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create a contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ContactDto</returns>
        public async System.Threading.Tasks.Task<ContactDto> CreateContactAsync(CreateContactOptions createContactOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ContactDto> localVarResponse = await CreateContactWithHttpInfoAsync(createContactOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create a contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createContactOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ContactDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ContactDto>> CreateContactWithHttpInfoAsync(CreateContactOptions createContactOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createContactOptions' is set
            if (createContactOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createContactOptions' when calling ContactControllerApi->CreateContact");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createContactOptions;

            localVarRequestOptions.Operation = "ContactControllerApi.CreateContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ContactDto>("/contacts", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteContact(Guid contactId, int operationIndex = 0)
        {
            DeleteContactWithHttpInfo(contactId);
        }

        /// <summary>
        /// Delete contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteContactWithHttpInfo(Guid contactId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.DeleteContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/contacts/{contactId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteContactAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteContactWithHttpInfoAsync(contactId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteContactWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.DeleteContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/contacts/{contactId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageContactProjection</returns>
        public PageContactProjection GetAllContacts(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageContactProjection> localVarResponse = GetAllContactsWithHttpInfo(page, size, sort, since, before, search);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageContactProjection</returns>
        public mailslurp.Client.ApiResponse<PageContactProjection> GetAllContactsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }

            localVarRequestOptions.Operation = "ContactControllerApi.GetAllContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageContactProjection>("/contacts/paginated", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageContactProjection</returns>
        public async System.Threading.Tasks.Task<PageContactProjection> GetAllContactsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageContactProjection> localVarResponse = await GetAllContactsWithHttpInfoAsync(page, size, sort, since, before, search, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="search">Search terms (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageContactProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageContactProjection>> GetAllContactsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), string search = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }

            localVarRequestOptions.Operation = "ContactControllerApi.GetAllContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageContactProjection>("/contacts/paginated", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ContactDto</returns>
        public ContactDto GetContact(Guid contactId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ContactDto> localVarResponse = GetContactWithHttpInfo(contactId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ContactDto</returns>
        public mailslurp.Client.ApiResponse<ContactDto> GetContactWithHttpInfo(Guid contactId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.GetContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ContactDto>("/contacts/{contactId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ContactDto</returns>
        public async System.Threading.Tasks.Task<ContactDto> GetContactAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ContactDto> localVarResponse = await GetContactWithHttpInfoAsync(contactId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get contact 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ContactDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ContactDto>> GetContactWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.GetContact";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ContactDto>("/contacts/{contactId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContact", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get contact vCard vcf file 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        [Obsolete]
        public void GetContactVCard(Guid contactId, int operationIndex = 0)
        {
            GetContactVCardWithHttpInfo(contactId);
        }

        /// <summary>
        /// Get contact vCard vcf file 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        [Obsolete]
        public mailslurp.Client.ApiResponse<Object> GetContactVCardWithHttpInfo(Guid contactId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.GetContactVCard";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Object>("/contacts/{contactId}/download", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContactVCard", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get contact vCard vcf file 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task GetContactVCardAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await GetContactVCardWithHttpInfoAsync(contactId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Get contact vCard vcf file 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contactId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        [Obsolete]
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> GetContactVCardWithHttpInfoAsync(Guid contactId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("contactId", mailslurp.Client.ClientUtils.ParameterToString(contactId)); // path parameter

            localVarRequestOptions.Operation = "ContactControllerApi.GetContactVCard";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Object>("/contacts/{contactId}/download", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContactVCard", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;ContactProjection&gt;</returns>
        public List<ContactProjection> GetContacts(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<ContactProjection>> localVarResponse = GetContactsWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;ContactProjection&gt;</returns>
        public mailslurp.Client.ApiResponse<List<ContactProjection>> GetContactsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ContactControllerApi.GetContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<List<ContactProjection>>("/contacts", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;ContactProjection&gt;</returns>
        public async System.Threading.Tasks.Task<List<ContactProjection>> GetContactsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<ContactProjection>> localVarResponse = await GetContactsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all contacts 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;ContactProjection&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<ContactProjection>>> GetContactsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ContactControllerApi.GetContacts";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<List<ContactProjection>>("/contacts", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetContacts", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/ConnectorControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IConnectorControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create an inbox connector
        /// </summary>
        /// <remarks>
        /// Sync emails between external mailboxes and MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        ConnectorDto CreateConnector(CreateConnectorOptions createConnectorOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox connector
        /// </summary>
        /// <remarks>
        /// Sync emails between external mailboxes and MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        ApiResponse<ConnectorDto> CreateConnectorWithHttpInfo(CreateConnectorOptions createConnectorOptions, int operationIndex = 0);
        /// <summary>
        /// Create an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorImapConnectionDto</returns>
        ConnectorImapConnectionDto CreateConnectorImapConnection(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorImapConnectionDto</returns>
        ApiResponse<ConnectorImapConnectionDto> CreateConnectorImapConnectionWithHttpInfo(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0);
        /// <summary>
        /// Create an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSmtpConnectionDto</returns>
        ConnectorSmtpConnectionDto CreateConnectorSmtpConnection(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0);

        /// <summary>
        /// Create an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSmtpConnectionDto</returns>
        ApiResponse<ConnectorSmtpConnectionDto> CreateConnectorSmtpConnectionWithHttpInfo(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0);
        /// <summary>
        /// Delete all inbox connectors
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllConnector(int operationIndex = 0);

        /// <summary>
        /// Delete all inbox connectors
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllConnectorWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete an inbox connector
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteConnector(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteConnectorWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Delete an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Delete IMAP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteConnectorImapConnection(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Delete IMAP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteConnectorImapConnectionWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Delete an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Delete SMTP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteConnectorSmtpConnection(Guid id, int operationIndex = 0);

        /// <summary>
        /// Delete an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Delete SMTP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteConnectorSmtpConnectionWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get all inbox connector sync events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnectorSyncEvents</returns>
        PageConnectorSyncEvents GetAllConnectorSyncEvents(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnectorSyncEvents</returns>
        ApiResponse<PageConnectorSyncEvents> GetAllConnectorSyncEventsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get an inbox connector
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        ConnectorDto GetConnector(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        ApiResponse<ConnectorDto> GetConnectorWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get an inbox connector sync event
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSyncEventDto</returns>
        ConnectorSyncEventDto GetConnectorSyncEvent(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get an inbox connector sync event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSyncEventDto</returns>
        ApiResponse<ConnectorSyncEventDto> GetConnectorSyncEventWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get an inbox connector sync events
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnectorSyncEvents</returns>
        PageConnectorSyncEvents GetConnectorSyncEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get an inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnectorSyncEvents</returns>
        ApiResponse<PageConnectorSyncEvents> GetConnectorSyncEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get inbox connectors
        /// </summary>
        /// <remarks>
        /// List inbox connectors that sync external emails to MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnector</returns>
        PageConnector GetConnectors(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get inbox connectors
        /// </summary>
        /// <remarks>
        /// List inbox connectors that sync external emails to MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnector</returns>
        ApiResponse<PageConnector> GetConnectorsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Sync an inbox connector
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSyncRequestResult</returns>
        ConnectorSyncRequestResult SyncConnector(Guid id, int operationIndex = 0);

        /// <summary>
        /// Sync an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSyncRequestResult</returns>
        ApiResponse<ConnectorSyncRequestResult> SyncConnectorWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Update an inbox connector
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        ConnectorDto UpdateConnector(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0);

        /// <summary>
        /// Update an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        ApiResponse<ConnectorDto> UpdateConnectorWithHttpInfo(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IConnectorControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create an inbox connector
        /// </summary>
        /// <remarks>
        /// Sync emails between external mailboxes and MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        System.Threading.Tasks.Task<ConnectorDto> CreateConnectorAsync(CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox connector
        /// </summary>
        /// <remarks>
        /// Sync emails between external mailboxes and MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorDto>> CreateConnectorWithHttpInfoAsync(CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorImapConnectionDto</returns>
        System.Threading.Tasks.Task<ConnectorImapConnectionDto> CreateConnectorImapConnectionAsync(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorImapConnectionDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorImapConnectionDto>> CreateConnectorImapConnectionWithHttpInfoAsync(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSmtpConnectionDto</returns>
        System.Threading.Tasks.Task<ConnectorSmtpConnectionDto> CreateConnectorSmtpConnectionAsync(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSmtpConnectionDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorSmtpConnectionDto>> CreateConnectorSmtpConnectionWithHttpInfoAsync(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all inbox connectors
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllConnectorAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all inbox connectors
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllConnectorWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Delete IMAP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteConnectorImapConnectionAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox connector IMAP connection
        /// </summary>
        /// <remarks>
        /// Delete IMAP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteConnectorImapConnectionWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Delete SMTP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteConnectorSmtpConnectionAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an inbox connector SMTP connection
        /// </summary>
        /// <remarks>
        /// Delete SMTP connection for external inbox
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteConnectorSmtpConnectionWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnectorSyncEvents</returns>
        System.Threading.Tasks.Task<PageConnectorSyncEvents> GetAllConnectorSyncEventsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnectorSyncEvents)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageConnectorSyncEvents>> GetAllConnectorSyncEventsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        System.Threading.Tasks.Task<ConnectorDto> GetConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorDto>> GetConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox connector sync event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSyncEventDto</returns>
        System.Threading.Tasks.Task<ConnectorSyncEventDto> GetConnectorSyncEventAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox connector sync event
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSyncEventDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorSyncEventDto>> GetConnectorSyncEventWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnectorSyncEvents</returns>
        System.Threading.Tasks.Task<PageConnectorSyncEvents> GetConnectorSyncEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an inbox connector sync events
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnectorSyncEvents)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageConnectorSyncEvents>> GetConnectorSyncEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get inbox connectors
        /// </summary>
        /// <remarks>
        /// List inbox connectors that sync external emails to MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnector</returns>
        System.Threading.Tasks.Task<PageConnector> GetConnectorsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get inbox connectors
        /// </summary>
        /// <remarks>
        /// List inbox connectors that sync external emails to MailSlurp inboxes
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnector)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageConnector>> GetConnectorsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Sync an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSyncRequestResult</returns>
        System.Threading.Tasks.Task<ConnectorSyncRequestResult> SyncConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Sync an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSyncRequestResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorSyncRequestResult>> SyncConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        System.Threading.Tasks.Task<ConnectorDto> UpdateConnectorAsync(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update an inbox connector
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<ConnectorDto>> UpdateConnectorWithHttpInfoAsync(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IConnectorControllerApi : IConnectorControllerApiSync, IConnectorControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ConnectorControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public ConnectorControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public ConnectorControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectorControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public ConnectorControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create an inbox connector Sync emails between external mailboxes and MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        public ConnectorDto CreateConnector(CreateConnectorOptions createConnectorOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = CreateConnectorWithHttpInfo(createConnectorOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector Sync emails between external mailboxes and MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorDto> CreateConnectorWithHttpInfo(CreateConnectorOptions createConnectorOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createConnectorOptions' is set
            if (createConnectorOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorOptions' when calling ConnectorControllerApi->CreateConnector");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createConnectorOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ConnectorDto>("/connectors", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox connector Sync emails between external mailboxes and MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        public async System.Threading.Tasks.Task<ConnectorDto> CreateConnectorAsync(CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = await CreateConnectorWithHttpInfoAsync(createConnectorOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector Sync emails between external mailboxes and MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorDto>> CreateConnectorWithHttpInfoAsync(CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createConnectorOptions' is set
            if (createConnectorOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorOptions' when calling ConnectorControllerApi->CreateConnector");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createConnectorOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ConnectorDto>("/connectors", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox connector IMAP connection Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorImapConnectionDto</returns>
        public ConnectorImapConnectionDto CreateConnectorImapConnection(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorImapConnectionDto> localVarResponse = CreateConnectorImapConnectionWithHttpInfo(id, createConnectorImapConnectionOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector IMAP connection Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorImapConnectionDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorImapConnectionDto> CreateConnectorImapConnectionWithHttpInfo(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createConnectorImapConnectionOptions' is set
            if (createConnectorImapConnectionOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorImapConnectionOptions' when calling ConnectorControllerApi->CreateConnectorImapConnection");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorImapConnectionOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnectorImapConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ConnectorImapConnectionDto>("/connectors/{id}/imap", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnectorImapConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox connector IMAP connection Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorImapConnectionDto</returns>
        public async System.Threading.Tasks.Task<ConnectorImapConnectionDto> CreateConnectorImapConnectionAsync(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorImapConnectionDto> localVarResponse = await CreateConnectorImapConnectionWithHttpInfoAsync(id, createConnectorImapConnectionOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector IMAP connection Allows the reading of emails in an external mailbox and syncing to a MailSlurp inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorImapConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorImapConnectionDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorImapConnectionDto>> CreateConnectorImapConnectionWithHttpInfoAsync(Guid id, CreateConnectorImapConnectionOptions createConnectorImapConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createConnectorImapConnectionOptions' is set
            if (createConnectorImapConnectionOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorImapConnectionOptions' when calling ConnectorControllerApi->CreateConnectorImapConnection");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorImapConnectionOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnectorImapConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ConnectorImapConnectionDto>("/connectors/{id}/imap", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnectorImapConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox connector SMTP connection Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSmtpConnectionDto</returns>
        public ConnectorSmtpConnectionDto CreateConnectorSmtpConnection(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorSmtpConnectionDto> localVarResponse = CreateConnectorSmtpConnectionWithHttpInfo(id, createConnectorSmtpConnectionOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector SMTP connection Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSmtpConnectionDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorSmtpConnectionDto> CreateConnectorSmtpConnectionWithHttpInfo(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createConnectorSmtpConnectionOptions' is set
            if (createConnectorSmtpConnectionOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorSmtpConnectionOptions' when calling ConnectorControllerApi->CreateConnectorSmtpConnection");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorSmtpConnectionOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnectorSmtpConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ConnectorSmtpConnectionDto>("/connectors/{id}/smtp", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnectorSmtpConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an inbox connector SMTP connection Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSmtpConnectionDto</returns>
        public async System.Threading.Tasks.Task<ConnectorSmtpConnectionDto> CreateConnectorSmtpConnectionAsync(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorSmtpConnectionDto> localVarResponse = await CreateConnectorSmtpConnectionWithHttpInfoAsync(id, createConnectorSmtpConnectionOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an inbox connector SMTP connection Allows sending via connector and email is routed to connected inbox and sent via SMTP
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorSmtpConnectionOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSmtpConnectionDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorSmtpConnectionDto>> CreateConnectorSmtpConnectionWithHttpInfoAsync(Guid id, CreateConnectorSmtpConnectionOptions createConnectorSmtpConnectionOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createConnectorSmtpConnectionOptions' is set
            if (createConnectorSmtpConnectionOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorSmtpConnectionOptions' when calling ConnectorControllerApi->CreateConnectorSmtpConnection");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorSmtpConnectionOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.CreateConnectorSmtpConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ConnectorSmtpConnectionDto>("/connectors/{id}/smtp", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateConnectorSmtpConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all inbox connectors 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllConnector(int operationIndex = 0)
        {
            DeleteAllConnectorWithHttpInfo();
        }

        /// <summary>
        /// Delete all inbox connectors 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllConnectorWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteAllConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/connectors", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all inbox connectors 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllConnectorAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllConnectorWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all inbox connectors 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllConnectorWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteAllConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/connectors", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteConnector(Guid id, int operationIndex = 0)
        {
            DeleteConnectorWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteConnectorWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/connectors/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteConnectorWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/connectors/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector IMAP connection Delete IMAP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteConnectorImapConnection(Guid id, int operationIndex = 0)
        {
            DeleteConnectorImapConnectionWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox connector IMAP connection Delete IMAP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteConnectorImapConnectionWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnectorImapConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/connectors/{id}/imap", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnectorImapConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector IMAP connection Delete IMAP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteConnectorImapConnectionAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteConnectorImapConnectionWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox connector IMAP connection Delete IMAP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteConnectorImapConnectionWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnectorImapConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/connectors/{id}/imap", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnectorImapConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector SMTP connection Delete SMTP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteConnectorSmtpConnection(Guid id, int operationIndex = 0)
        {
            DeleteConnectorSmtpConnectionWithHttpInfo(id);
        }

        /// <summary>
        /// Delete an inbox connector SMTP connection Delete SMTP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteConnectorSmtpConnectionWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnectorSmtpConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/connectors/{id}/smtp", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnectorSmtpConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an inbox connector SMTP connection Delete SMTP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteConnectorSmtpConnectionAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteConnectorSmtpConnectionWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an inbox connector SMTP connection Delete SMTP connection for external inbox
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteConnectorSmtpConnectionWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.DeleteConnectorSmtpConnection";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/connectors/{id}/smtp", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteConnectorSmtpConnection", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnectorSyncEvents</returns>
        public PageConnectorSyncEvents GetAllConnectorSyncEvents(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageConnectorSyncEvents> localVarResponse = GetAllConnectorSyncEventsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnectorSyncEvents</returns>
        public mailslurp.Client.ApiResponse<PageConnectorSyncEvents> GetAllConnectorSyncEventsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetAllConnectorSyncEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageConnectorSyncEvents>("/connectors/events", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllConnectorSyncEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnectorSyncEvents</returns>
        public async System.Threading.Tasks.Task<PageConnectorSyncEvents> GetAllConnectorSyncEventsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageConnectorSyncEvents> localVarResponse = await GetAllConnectorSyncEventsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnectorSyncEvents)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageConnectorSyncEvents>> GetAllConnectorSyncEventsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetAllConnectorSyncEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageConnectorSyncEvents>("/connectors/events", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAllConnectorSyncEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        public ConnectorDto GetConnector(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = GetConnectorWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorDto> GetConnectorWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ConnectorDto>("/connectors/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        public async System.Threading.Tasks.Task<ConnectorDto> GetConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = await GetConnectorWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorDto>> GetConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ConnectorDto>("/connectors/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector sync event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSyncEventDto</returns>
        public ConnectorSyncEventDto GetConnectorSyncEvent(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorSyncEventDto> localVarResponse = GetConnectorSyncEventWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector sync event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSyncEventDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorSyncEventDto> GetConnectorSyncEventWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectorSyncEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ConnectorSyncEventDto>("/connectors/events/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectorSyncEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector sync event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSyncEventDto</returns>
        public async System.Threading.Tasks.Task<ConnectorSyncEventDto> GetConnectorSyncEventAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorSyncEventDto> localVarResponse = await GetConnectorSyncEventWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector sync event 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSyncEventDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorSyncEventDto>> GetConnectorSyncEventWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectorSyncEvent";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ConnectorSyncEventDto>("/connectors/events/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectorSyncEvent", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnectorSyncEvents</returns>
        public PageConnectorSyncEvents GetConnectorSyncEvents(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageConnectorSyncEvents> localVarResponse = GetConnectorSyncEventsWithHttpInfo(id, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnectorSyncEvents</returns>
        public mailslurp.Client.ApiResponse<PageConnectorSyncEvents> GetConnectorSyncEventsWithHttpInfo(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectorSyncEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageConnectorSyncEvents>("/connectors/{id}/events", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectorSyncEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnectorSyncEvents</returns>
        public async System.Threading.Tasks.Task<PageConnectorSyncEvents> GetConnectorSyncEventsAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageConnectorSyncEvents> localVarResponse = await GetConnectorSyncEventsWithHttpInfoAsync(id, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an inbox connector sync events 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnectorSyncEvents)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageConnectorSyncEvents>> GetConnectorSyncEventsWithHttpInfoAsync(Guid id, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectorSyncEvents";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageConnectorSyncEvents>("/connectors/{id}/events", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectorSyncEvents", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox connectors List inbox connectors that sync external emails to MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageConnector</returns>
        public PageConnector GetConnectors(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageConnector> localVarResponse = GetConnectorsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox connectors List inbox connectors that sync external emails to MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageConnector</returns>
        public mailslurp.Client.ApiResponse<PageConnector> GetConnectorsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectors";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageConnector>("/connectors", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectors", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get inbox connectors List inbox connectors that sync external emails to MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageConnector</returns>
        public async System.Threading.Tasks.Task<PageConnector> GetConnectorsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageConnector> localVarResponse = await GetConnectorsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get inbox connectors List inbox connectors that sync external emails to MailSlurp inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in connector list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in connector list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageConnector)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageConnector>> GetConnectorsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "ConnectorControllerApi.GetConnectors";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageConnector>("/connectors", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetConnectors", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Sync an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorSyncRequestResult</returns>
        public ConnectorSyncRequestResult SyncConnector(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorSyncRequestResult> localVarResponse = SyncConnectorWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Sync an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorSyncRequestResult</returns>
        public mailslurp.Client.ApiResponse<ConnectorSyncRequestResult> SyncConnectorWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.SyncConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<ConnectorSyncRequestResult>("/connectors/{id}/sync", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SyncConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Sync an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorSyncRequestResult</returns>
        public async System.Threading.Tasks.Task<ConnectorSyncRequestResult> SyncConnectorAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorSyncRequestResult> localVarResponse = await SyncConnectorWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Sync an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorSyncRequestResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorSyncRequestResult>> SyncConnectorWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "ConnectorControllerApi.SyncConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<ConnectorSyncRequestResult>("/connectors/{id}/sync", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SyncConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ConnectorDto</returns>
        public ConnectorDto UpdateConnector(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = UpdateConnectorWithHttpInfo(id, createConnectorOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ConnectorDto</returns>
        public mailslurp.Client.ApiResponse<ConnectorDto> UpdateConnectorWithHttpInfo(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createConnectorOptions' is set
            if (createConnectorOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorOptions' when calling ConnectorControllerApi->UpdateConnector");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.UpdateConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<ConnectorDto>("/connectors/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ConnectorDto</returns>
        public async System.Threading.Tasks.Task<ConnectorDto> UpdateConnectorAsync(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ConnectorDto> localVarResponse = await UpdateConnectorWithHttpInfoAsync(id, createConnectorOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an inbox connector 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id"></param>
        /// <param name="createConnectorOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ConnectorDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ConnectorDto>> UpdateConnectorWithHttpInfoAsync(Guid id, CreateConnectorOptions createConnectorOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createConnectorOptions' is set
            if (createConnectorOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createConnectorOptions' when calling ConnectorControllerApi->UpdateConnector");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter
            localVarRequestOptions.Data = createConnectorOptions;

            localVarRequestOptions.Operation = "ConnectorControllerApi.UpdateConnector";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<ConnectorDto>("/connectors/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateConnector", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/CommonActionsControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ICommonActionsControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto CreateNewEmailAddress(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0);

        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> CreateNewEmailAddressWithHttpInfo(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0);
        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        InboxDto CreateRandomInbox(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0);

        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        ApiResponse<InboxDto> CreateRandomInboxWithHttpInfo(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0);
        /// <summary>
        /// Delete inbox email address by inbox id
        /// </summary>
        /// <remarks>
        /// Deletes inbox email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteEmailAddress(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Delete inbox email address by inbox id
        /// </summary>
        /// <remarks>
        /// Deletes inbox email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteEmailAddressWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Delete all emails in an inbox
        /// </summary>
        /// <remarks>
        /// Deletes all emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void EmptyInbox(Guid inboxId, int operationIndex = 0);

        /// <summary>
        /// Delete all emails in an inbox
        /// </summary>
        /// <remarks>
        /// Deletes all emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> EmptyInboxWithHttpInfo(Guid inboxId, int operationIndex = 0);
        /// <summary>
        /// Send an email using query parameters
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendEmailQuery(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0);

        /// <summary>
        /// Send an email using query parameters
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendEmailQueryWithHttpInfo(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0);
        /// <summary>
        /// Send an email
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void SendEmailSimple(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Send an email
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> SendEmailSimpleWithHttpInfo(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ICommonActionsControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> CreateNewEmailAddressAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> CreateNewEmailAddressWithHttpInfoAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        System.Threading.Tasks.Task<InboxDto> CreateRandomInboxAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create new random inbox
        /// </summary>
        /// <remarks>
        /// Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<InboxDto>> CreateRandomInboxWithHttpInfoAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete inbox email address by inbox id
        /// </summary>
        /// <remarks>
        /// Deletes inbox email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteEmailAddressAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete inbox email address by inbox id
        /// </summary>
        /// <remarks>
        /// Deletes inbox email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteEmailAddressWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete all emails in an inbox
        /// </summary>
        /// <remarks>
        /// Deletes all emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task EmptyInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all emails in an inbox
        /// </summary>
        /// <remarks>
        /// Deletes all emails
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> EmptyInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send an email using query parameters
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendEmailQueryAsync(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send an email using query parameters
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendEmailQueryWithHttpInfoAsync(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send an email
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task SendEmailSimpleAsync(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send an email
        /// </summary>
        /// <remarks>
        /// If no senderId or inboxId provided a random email address will be used to send from.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> SendEmailSimpleWithHttpInfoAsync(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ICommonActionsControllerApi : ICommonActionsControllerApiSync, ICommonActionsControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="CommonActionsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public CommonActionsControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="CommonActionsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public CommonActionsControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="CommonActionsControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public CommonActionsControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="CommonActionsControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public CommonActionsControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto CreateNewEmailAddress(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = CreateNewEmailAddressWithHttpInfo(allowTeamAccess, useDomainPool, expiresAt, expiresIn, emailAddress, inboxType, description, name, tags, favourite, virtualInbox, useShortAddress, domainName, domainId, prefix);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> CreateNewEmailAddressWithHttpInfo(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.CreateNewEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxDto>("/newEmailAddress", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> CreateNewEmailAddressAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await CreateNewEmailAddressWithHttpInfoAsync(allowTeamAccess, useDomainPool, expiresAt, expiresIn, emailAddress, inboxType, description, name, tags, favourite, virtualInbox, useShortAddress, domainName, domainId, prefix, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> CreateNewEmailAddressWithHttpInfoAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.CreateNewEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxDto>("/newEmailAddress", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateNewEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>InboxDto</returns>
        public InboxDto CreateRandomInbox(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = CreateRandomInboxWithHttpInfo(allowTeamAccess, useDomainPool, expiresAt, expiresIn, emailAddress, inboxType, description, name, tags, favourite, virtualInbox, useShortAddress, domainName, domainId, prefix);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of InboxDto</returns>
        public mailslurp.Client.ApiResponse<InboxDto> CreateRandomInboxWithHttpInfo(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.CreateRandomInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<InboxDto>("/createInbox", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateRandomInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of InboxDto</returns>
        public async System.Threading.Tasks.Task<InboxDto> CreateRandomInboxAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<InboxDto> localVarResponse = await CreateRandomInboxWithHttpInfoAsync(allowTeamAccess, useDomainPool, expiresAt, expiresIn, emailAddress, inboxType, description, name, tags, favourite, virtualInbox, useShortAddress, domainName, domainId, prefix, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create new random inbox Returns an Inbox with an &#x60;id&#x60; and an &#x60;emailAddress&#x60;
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="allowTeamAccess"> (optional)</param>
        /// <param name="useDomainPool"> (optional)</param>
        /// <param name="expiresAt"> (optional)</param>
        /// <param name="expiresIn"> (optional)</param>
        /// <param name="emailAddress"> (optional)</param>
        /// <param name="inboxType"> (optional)</param>
        /// <param name="description"> (optional)</param>
        /// <param name="name"> (optional)</param>
        /// <param name="tags"> (optional)</param>
        /// <param name="favourite"> (optional)</param>
        /// <param name="virtualInbox"> (optional)</param>
        /// <param name="useShortAddress"> (optional)</param>
        /// <param name="domainName"> (optional)</param>
        /// <param name="domainId"> (optional)</param>
        /// <param name="prefix"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (InboxDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<InboxDto>> CreateRandomInboxWithHttpInfoAsync(bool? allowTeamAccess = default(bool?), bool? useDomainPool = default(bool?), DateTime? expiresAt = default(DateTime?), long? expiresIn = default(long?), string emailAddress = default(string), string inboxType = default(string), string description = default(string), string name = default(string), List<string> tags = default(List<string>), bool? favourite = default(bool?), bool? virtualInbox = default(bool?), bool? useShortAddress = default(bool?), string domainName = default(string), Guid? domainId = default(Guid?), string prefix = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (allowTeamAccess != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "allowTeamAccess", allowTeamAccess));
            }
            if (useDomainPool != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useDomainPool", useDomainPool));
            }
            if (expiresAt != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresAt", expiresAt));
            }
            if (expiresIn != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "expiresIn", expiresIn));
            }
            if (emailAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "emailAddress", emailAddress));
            }
            if (inboxType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxType", inboxType));
            }
            if (description != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "description", description));
            }
            if (name != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "name", name));
            }
            if (tags != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("multi", "tags", tags));
            }
            if (favourite != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "favourite", favourite));
            }
            if (virtualInbox != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "virtualInbox", virtualInbox));
            }
            if (useShortAddress != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "useShortAddress", useShortAddress));
            }
            if (domainName != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainName", domainName));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }
            if (prefix != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "prefix", prefix));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.CreateRandomInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<InboxDto>("/createInbox", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateRandomInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox email address by inbox id Deletes inbox email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteEmailAddress(Guid inboxId, int operationIndex = 0)
        {
            DeleteEmailAddressWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete inbox email address by inbox id Deletes inbox email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteEmailAddressWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "CommonActionsControllerApi.DeleteEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/deleteEmailAddress", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete inbox email address by inbox id Deletes inbox email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteEmailAddressAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteEmailAddressWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete inbox email address by inbox id Deletes inbox email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteEmailAddressWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "CommonActionsControllerApi.DeleteEmailAddress";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/deleteEmailAddress", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteEmailAddress", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in an inbox Deletes all emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void EmptyInbox(Guid inboxId, int operationIndex = 0)
        {
            EmptyInboxWithHttpInfo(inboxId);
        }

        /// <summary>
        /// Delete all emails in an inbox Deletes all emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> EmptyInboxWithHttpInfo(Guid inboxId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "CommonActionsControllerApi.EmptyInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/emptyInbox", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("EmptyInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all emails in an inbox Deletes all emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task EmptyInboxAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await EmptyInboxWithHttpInfoAsync(inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all emails in an inbox Deletes all emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="inboxId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> EmptyInboxWithHttpInfoAsync(Guid inboxId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));

            localVarRequestOptions.Operation = "CommonActionsControllerApi.EmptyInbox";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/emptyInbox", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("EmptyInbox", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email using query parameters If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendEmailQuery(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0)
        {
            SendEmailQueryWithHttpInfo(to, senderId, body, subject);
        }

        /// <summary>
        /// Send an email using query parameters If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendEmailQueryWithHttpInfo(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0)
        {
            // verify the required parameter 'to' is set
            if (to == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'to' when calling CommonActionsControllerApi->SendEmailQuery");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (senderId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "senderId", senderId));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "to", to));
            if (body != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "body", body));
            }
            if (subject != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "subject", subject));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.SendEmailQuery";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/sendEmailQuery", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailQuery", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email using query parameters If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendEmailQueryAsync(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendEmailQueryWithHttpInfoAsync(to, senderId, body, subject, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send an email using query parameters If no senderId or inboxId provided a random email address will be used to send from. Ensure your parameters are URL encoded.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="to">Email address to send to</param>
        /// <param name="senderId">ID of inbox to send from. If null an inbox will be created for sending (optional)</param>
        /// <param name="body">Body of the email message. Supports HTML (optional)</param>
        /// <param name="subject">Subject line of the email (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendEmailQueryWithHttpInfoAsync(string to, Guid? senderId = default(Guid?), string body = default(string), string subject = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'to' is set
            if (to == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'to' when calling CommonActionsControllerApi->SendEmailQuery");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (senderId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "senderId", senderId));
            }
            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "to", to));
            if (body != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "body", body));
            }
            if (subject != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "subject", subject));
            }

            localVarRequestOptions.Operation = "CommonActionsControllerApi.SendEmailQuery";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/sendEmailQuery", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailQuery", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email If no senderId or inboxId provided a random email address will be used to send from.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void SendEmailSimple(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0)
        {
            SendEmailSimpleWithHttpInfo(simpleSendEmailOptions);
        }

        /// <summary>
        /// Send an email If no senderId or inboxId provided a random email address will be used to send from.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> SendEmailSimpleWithHttpInfo(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'simpleSendEmailOptions' is set
            if (simpleSendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'simpleSendEmailOptions' when calling CommonActionsControllerApi->SendEmailSimple");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = simpleSendEmailOptions;

            localVarRequestOptions.Operation = "CommonActionsControllerApi.SendEmailSimple";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/sendEmail", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailSimple", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email If no senderId or inboxId provided a random email address will be used to send from.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task SendEmailSimpleAsync(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await SendEmailSimpleWithHttpInfoAsync(simpleSendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Send an email If no senderId or inboxId provided a random email address will be used to send from.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="simpleSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> SendEmailSimpleWithHttpInfoAsync(SimpleSendEmailOptions simpleSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'simpleSendEmailOptions' is set
            if (simpleSendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'simpleSendEmailOptions' when calling CommonActionsControllerApi->SendEmailSimple");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = simpleSendEmailOptions;

            localVarRequestOptions.Operation = "CommonActionsControllerApi.SendEmailSimple";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/sendEmail", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendEmailSimple", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/BulkActionsControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBulkActionsControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Bulk create Inboxes (email addresses)
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;InboxDto&gt;</returns>
        List<InboxDto> BulkCreateInboxes(int count, int operationIndex = 0);

        /// <summary>
        /// Bulk create Inboxes (email addresses)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;InboxDto&gt;</returns>
        ApiResponse<List<InboxDto>> BulkCreateInboxesWithHttpInfo(int count, int operationIndex = 0);
        /// <summary>
        /// Bulk Delete Inboxes
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void BulkDeleteInboxes(List<Guid> requestBody, int operationIndex = 0);

        /// <summary>
        /// Bulk Delete Inboxes
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> BulkDeleteInboxesWithHttpInfo(List<Guid> requestBody, int operationIndex = 0);
        /// <summary>
        /// Bulk Send Emails
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void BulkSendEmails(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Bulk Send Emails
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> BulkSendEmailsWithHttpInfo(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBulkActionsControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Bulk create Inboxes (email addresses)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;InboxDto&gt;</returns>
        System.Threading.Tasks.Task<List<InboxDto>> BulkCreateInboxesAsync(int count, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Bulk create Inboxes (email addresses)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;InboxDto&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<InboxDto>>> BulkCreateInboxesWithHttpInfoAsync(int count, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Bulk Delete Inboxes
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task BulkDeleteInboxesAsync(List<Guid> requestBody, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Bulk Delete Inboxes
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> BulkDeleteInboxesWithHttpInfoAsync(List<Guid> requestBody, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Bulk Send Emails
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task BulkSendEmailsAsync(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Bulk Send Emails
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> BulkSendEmailsWithHttpInfoAsync(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBulkActionsControllerApi : IBulkActionsControllerApiSync, IBulkActionsControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="BulkActionsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public BulkActionsControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BulkActionsControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public BulkActionsControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BulkActionsControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public BulkActionsControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BulkActionsControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public BulkActionsControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Bulk create Inboxes (email addresses) 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;InboxDto&gt;</returns>
        public List<InboxDto> BulkCreateInboxes(int count, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<InboxDto>> localVarResponse = BulkCreateInboxesWithHttpInfo(count);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Bulk create Inboxes (email addresses) 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;InboxDto&gt;</returns>
        public mailslurp.Client.ApiResponse<List<InboxDto>> BulkCreateInboxesWithHttpInfo(int count, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkCreateInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<InboxDto>>("/bulk/inboxes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkCreateInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Bulk create Inboxes (email addresses) 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;InboxDto&gt;</returns>
        public async System.Threading.Tasks.Task<List<InboxDto>> BulkCreateInboxesAsync(int count, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<InboxDto>> localVarResponse = await BulkCreateInboxesWithHttpInfoAsync(count, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Bulk create Inboxes (email addresses) 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="count">Number of inboxes to be created in bulk</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;InboxDto&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<InboxDto>>> BulkCreateInboxesWithHttpInfoAsync(int count, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "count", count));

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkCreateInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<InboxDto>>("/bulk/inboxes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkCreateInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Bulk Delete Inboxes 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void BulkDeleteInboxes(List<Guid> requestBody, int operationIndex = 0)
        {
            BulkDeleteInboxesWithHttpInfo(requestBody);
        }

        /// <summary>
        /// Bulk Delete Inboxes 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> BulkDeleteInboxesWithHttpInfo(List<Guid> requestBody, int operationIndex = 0)
        {
            // verify the required parameter 'requestBody' is set
            if (requestBody == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'requestBody' when calling BulkActionsControllerApi->BulkDeleteInboxes");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = requestBody;

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkDeleteInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/bulk/inboxes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkDeleteInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Bulk Delete Inboxes 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task BulkDeleteInboxesAsync(List<Guid> requestBody, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await BulkDeleteInboxesWithHttpInfoAsync(requestBody, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Bulk Delete Inboxes 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="requestBody"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> BulkDeleteInboxesWithHttpInfoAsync(List<Guid> requestBody, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'requestBody' is set
            if (requestBody == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'requestBody' when calling BulkActionsControllerApi->BulkDeleteInboxes");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = requestBody;

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkDeleteInboxes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/bulk/inboxes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkDeleteInboxes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Bulk Send Emails 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void BulkSendEmails(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0)
        {
            BulkSendEmailsWithHttpInfo(bulkSendEmailOptions);
        }

        /// <summary>
        /// Bulk Send Emails 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> BulkSendEmailsWithHttpInfo(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'bulkSendEmailOptions' is set
            if (bulkSendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'bulkSendEmailOptions' when calling BulkActionsControllerApi->BulkSendEmails");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = bulkSendEmailOptions;

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkSendEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<Object>("/bulk/send", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkSendEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Bulk Send Emails 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task BulkSendEmailsAsync(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await BulkSendEmailsWithHttpInfoAsync(bulkSendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Bulk Send Emails 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="bulkSendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> BulkSendEmailsWithHttpInfoAsync(BulkSendEmailOptions bulkSendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'bulkSendEmailOptions' is set
            if (bulkSendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'bulkSendEmailOptions' when calling BulkActionsControllerApi->BulkSendEmails");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = bulkSendEmailOptions;

            localVarRequestOptions.Operation = "BulkActionsControllerApi.BulkSendEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<Object>("/bulk/send", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("BulkSendEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/BounceControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBounceControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced
        /// </summary>
        /// <remarks>
        /// Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FilterBouncedRecipientsResult</returns>
        FilterBouncedRecipientsResult FilterBouncedRecipient(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0);

        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced
        /// </summary>
        /// <remarks>
        /// Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FilterBouncedRecipientsResult</returns>
        ApiResponse<FilterBouncedRecipientsResult> FilterBouncedRecipientWithHttpInfo(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0);
        /// <summary>
        /// Can account send email
        /// </summary>
        /// <remarks>
        /// Check if account block status prevents sending
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AccountBounceBlockDto</returns>
        AccountBounceBlockDto GetAccountBounceBlockStatus(int operationIndex = 0);

        /// <summary>
        /// Can account send email
        /// </summary>
        /// <remarks>
        /// Check if account block status prevents sending
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AccountBounceBlockDto</returns>
        ApiResponse<AccountBounceBlockDto> GetAccountBounceBlockStatusWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>BouncedEmailDto</returns>
        BouncedEmailDto GetBouncedEmail(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of BouncedEmailDto</returns>
        ApiResponse<BouncedEmailDto> GetBouncedEmailWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get paginated list of bounced emails.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageBouncedEmail</returns>
        PageBouncedEmail GetBouncedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get paginated list of bounced emails.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageBouncedEmail</returns>
        ApiResponse<PageBouncedEmail> GetBouncedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>BouncedRecipientDto</returns>
        BouncedRecipientDto GetBouncedRecipient(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of BouncedRecipientDto</returns>
        ApiResponse<BouncedRecipientDto> GetBouncedRecipientWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get paginated list of bounced recipients.
        /// </summary>
        /// <remarks>
        /// Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageBouncedRecipients</returns>
        PageBouncedRecipients GetBouncedRecipients(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get paginated list of bounced recipients.
        /// </summary>
        /// <remarks>
        /// Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageBouncedRecipients</returns>
        ApiResponse<PageBouncedRecipients> GetBouncedRecipientsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get complaint
        /// </summary>
        /// <remarks>
        /// Get complaint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Complaint</returns>
        Complaint GetComplaint(Guid id, int operationIndex = 0);

        /// <summary>
        /// Get complaint
        /// </summary>
        /// <remarks>
        /// Get complaint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Complaint</returns>
        ApiResponse<Complaint> GetComplaintWithHttpInfo(Guid id, int operationIndex = 0);
        /// <summary>
        /// Get paginated list of complaints.
        /// </summary>
        /// <remarks>
        /// SMTP complaints made against your account
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageComplaint</returns>
        PageComplaint GetComplaints(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get paginated list of complaints.
        /// </summary>
        /// <remarks>
        /// SMTP complaints made against your account
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageComplaint</returns>
        ApiResponse<PageComplaint> GetComplaintsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get paginated list of unsubscribed recipients.
        /// </summary>
        /// <remarks>
        /// Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageListUnsubscribeRecipients</returns>
        PageListUnsubscribeRecipients GetListUnsubscribeRecipients(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get paginated list of unsubscribed recipients.
        /// </summary>
        /// <remarks>
        /// Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageListUnsubscribeRecipients</returns>
        ApiResponse<PageListUnsubscribeRecipients> GetListUnsubscribeRecipientsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBounceControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced
        /// </summary>
        /// <remarks>
        /// Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FilterBouncedRecipientsResult</returns>
        System.Threading.Tasks.Task<FilterBouncedRecipientsResult> FilterBouncedRecipientAsync(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced
        /// </summary>
        /// <remarks>
        /// Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FilterBouncedRecipientsResult)</returns>
        System.Threading.Tasks.Task<ApiResponse<FilterBouncedRecipientsResult>> FilterBouncedRecipientWithHttpInfoAsync(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Can account send email
        /// </summary>
        /// <remarks>
        /// Check if account block status prevents sending
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AccountBounceBlockDto</returns>
        System.Threading.Tasks.Task<AccountBounceBlockDto> GetAccountBounceBlockStatusAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Can account send email
        /// </summary>
        /// <remarks>
        /// Check if account block status prevents sending
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AccountBounceBlockDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<AccountBounceBlockDto>> GetAccountBounceBlockStatusWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of BouncedEmailDto</returns>
        System.Threading.Tasks.Task<BouncedEmailDto> GetBouncedEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (BouncedEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<BouncedEmailDto>> GetBouncedEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated list of bounced emails.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageBouncedEmail</returns>
        System.Threading.Tasks.Task<PageBouncedEmail> GetBouncedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated list of bounced emails.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageBouncedEmail)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageBouncedEmail>> GetBouncedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of BouncedRecipientDto</returns>
        System.Threading.Tasks.Task<BouncedRecipientDto> GetBouncedRecipientAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a bounced email.
        /// </summary>
        /// <remarks>
        /// Bounced emails are email you have sent that were rejected by a recipient
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (BouncedRecipientDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<BouncedRecipientDto>> GetBouncedRecipientWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated list of bounced recipients.
        /// </summary>
        /// <remarks>
        /// Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageBouncedRecipients</returns>
        System.Threading.Tasks.Task<PageBouncedRecipients> GetBouncedRecipientsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated list of bounced recipients.
        /// </summary>
        /// <remarks>
        /// Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageBouncedRecipients)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageBouncedRecipients>> GetBouncedRecipientsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get complaint
        /// </summary>
        /// <remarks>
        /// Get complaint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Complaint</returns>
        System.Threading.Tasks.Task<Complaint> GetComplaintAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get complaint
        /// </summary>
        /// <remarks>
        /// Get complaint
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Complaint)</returns>
        System.Threading.Tasks.Task<ApiResponse<Complaint>> GetComplaintWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated list of complaints.
        /// </summary>
        /// <remarks>
        /// SMTP complaints made against your account
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageComplaint</returns>
        System.Threading.Tasks.Task<PageComplaint> GetComplaintsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated list of complaints.
        /// </summary>
        /// <remarks>
        /// SMTP complaints made against your account
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageComplaint)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageComplaint>> GetComplaintsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get paginated list of unsubscribed recipients.
        /// </summary>
        /// <remarks>
        /// Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageListUnsubscribeRecipients</returns>
        System.Threading.Tasks.Task<PageListUnsubscribeRecipients> GetListUnsubscribeRecipientsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get paginated list of unsubscribed recipients.
        /// </summary>
        /// <remarks>
        /// Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageListUnsubscribeRecipients)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageListUnsubscribeRecipients>> GetListUnsubscribeRecipientsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IBounceControllerApi : IBounceControllerApiSync, IBounceControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="BounceControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public BounceControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BounceControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public BounceControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BounceControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public BounceControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="BounceControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public BounceControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Filter a list of email recipients and remove those who have bounced Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>FilterBouncedRecipientsResult</returns>
        public FilterBouncedRecipientsResult FilterBouncedRecipient(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<FilterBouncedRecipientsResult> localVarResponse = FilterBouncedRecipientWithHttpInfo(filterBouncedRecipientsOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of FilterBouncedRecipientsResult</returns>
        public mailslurp.Client.ApiResponse<FilterBouncedRecipientsResult> FilterBouncedRecipientWithHttpInfo(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0)
        {
            // verify the required parameter 'filterBouncedRecipientsOptions' is set
            if (filterBouncedRecipientsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'filterBouncedRecipientsOptions' when calling BounceControllerApi->FilterBouncedRecipient");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = filterBouncedRecipientsOptions;

            localVarRequestOptions.Operation = "BounceControllerApi.FilterBouncedRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<FilterBouncedRecipientsResult>("/bounce/filter-recipients", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("FilterBouncedRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of FilterBouncedRecipientsResult</returns>
        public async System.Threading.Tasks.Task<FilterBouncedRecipientsResult> FilterBouncedRecipientAsync(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<FilterBouncedRecipientsResult> localVarResponse = await FilterBouncedRecipientWithHttpInfoAsync(filterBouncedRecipientsOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Filter a list of email recipients and remove those who have bounced Prevent email sending errors by remove recipients who have resulted in past email bounces or complaints
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="filterBouncedRecipientsOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (FilterBouncedRecipientsResult)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<FilterBouncedRecipientsResult>> FilterBouncedRecipientWithHttpInfoAsync(FilterBouncedRecipientsOptions filterBouncedRecipientsOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'filterBouncedRecipientsOptions' is set
            if (filterBouncedRecipientsOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'filterBouncedRecipientsOptions' when calling BounceControllerApi->FilterBouncedRecipient");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = filterBouncedRecipientsOptions;

            localVarRequestOptions.Operation = "BounceControllerApi.FilterBouncedRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<FilterBouncedRecipientsResult>("/bounce/filter-recipients", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("FilterBouncedRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Can account send email Check if account block status prevents sending
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AccountBounceBlockDto</returns>
        public AccountBounceBlockDto GetAccountBounceBlockStatus(int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AccountBounceBlockDto> localVarResponse = GetAccountBounceBlockStatusWithHttpInfo();
            return localVarResponse.Data;
        }

        /// <summary>
        /// Can account send email Check if account block status prevents sending
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AccountBounceBlockDto</returns>
        public mailslurp.Client.ApiResponse<AccountBounceBlockDto> GetAccountBounceBlockStatusWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "BounceControllerApi.GetAccountBounceBlockStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AccountBounceBlockDto>("/bounce/account-block", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAccountBounceBlockStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Can account send email Check if account block status prevents sending
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AccountBounceBlockDto</returns>
        public async System.Threading.Tasks.Task<AccountBounceBlockDto> GetAccountBounceBlockStatusAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AccountBounceBlockDto> localVarResponse = await GetAccountBounceBlockStatusWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Can account send email Check if account block status prevents sending
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AccountBounceBlockDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AccountBounceBlockDto>> GetAccountBounceBlockStatusWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "BounceControllerApi.GetAccountBounceBlockStatus";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AccountBounceBlockDto>("/bounce/account-block", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAccountBounceBlockStatus", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>BouncedEmailDto</returns>
        public BouncedEmailDto GetBouncedEmail(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<BouncedEmailDto> localVarResponse = GetBouncedEmailWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of BouncedEmailDto</returns>
        public mailslurp.Client.ApiResponse<BouncedEmailDto> GetBouncedEmailWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<BouncedEmailDto>("/bounce/emails/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of BouncedEmailDto</returns>
        public async System.Threading.Tasks.Task<BouncedEmailDto> GetBouncedEmailAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<BouncedEmailDto> localVarResponse = await GetBouncedEmailWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced email to fetch</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (BouncedEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<BouncedEmailDto>> GetBouncedEmailWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<BouncedEmailDto>("/bounce/emails/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of bounced emails. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageBouncedEmail</returns>
        public PageBouncedEmail GetBouncedEmails(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageBouncedEmail> localVarResponse = GetBouncedEmailsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of bounced emails. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageBouncedEmail</returns>
        public mailslurp.Client.ApiResponse<PageBouncedEmail> GetBouncedEmailsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageBouncedEmail>("/bounce/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of bounced emails. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageBouncedEmail</returns>
        public async System.Threading.Tasks.Task<PageBouncedEmail> GetBouncedEmailsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageBouncedEmail> localVarResponse = await GetBouncedEmailsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of bounced emails. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageBouncedEmail)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageBouncedEmail>> GetBouncedEmailsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageBouncedEmail>("/bounce/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>BouncedRecipientDto</returns>
        public BouncedRecipientDto GetBouncedRecipient(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<BouncedRecipientDto> localVarResponse = GetBouncedRecipientWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of BouncedRecipientDto</returns>
        public mailslurp.Client.ApiResponse<BouncedRecipientDto> GetBouncedRecipientWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<BouncedRecipientDto>("/bounce/recipients/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of BouncedRecipientDto</returns>
        public async System.Threading.Tasks.Task<BouncedRecipientDto> GetBouncedRecipientAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<BouncedRecipientDto> localVarResponse = await GetBouncedRecipientWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a bounced email. Bounced emails are email you have sent that were rejected by a recipient
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the bounced recipient</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (BouncedRecipientDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<BouncedRecipientDto>> GetBouncedRecipientWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedRecipient";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<BouncedRecipientDto>("/bounce/recipients/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedRecipient", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of bounced recipients. Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageBouncedRecipients</returns>
        public PageBouncedRecipients GetBouncedRecipients(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageBouncedRecipients> localVarResponse = GetBouncedRecipientsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of bounced recipients. Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageBouncedRecipients</returns>
        public mailslurp.Client.ApiResponse<PageBouncedRecipients> GetBouncedRecipientsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedRecipients";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageBouncedRecipients>("/bounce/recipients", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedRecipients", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of bounced recipients. Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageBouncedRecipients</returns>
        public async System.Threading.Tasks.Task<PageBouncedRecipients> GetBouncedRecipientsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageBouncedRecipients> localVarResponse = await GetBouncedRecipientsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of bounced recipients. Bounced recipients are email addresses that you have sent emails to that did not accept the sent email. Once a recipient is bounced you cannot send emails to that address.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageBouncedRecipients)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageBouncedRecipients>> GetBouncedRecipientsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetBouncedRecipients";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageBouncedRecipients>("/bounce/recipients", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetBouncedRecipients", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get complaint Get complaint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>Complaint</returns>
        public Complaint GetComplaint(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<Complaint> localVarResponse = GetComplaintWithHttpInfo(id);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get complaint Get complaint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Complaint</returns>
        public mailslurp.Client.ApiResponse<Complaint> GetComplaintWithHttpInfo(Guid id, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetComplaint";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<Complaint>("/bounce/complaints/{id}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetComplaint", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get complaint Get complaint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of Complaint</returns>
        public async System.Threading.Tasks.Task<Complaint> GetComplaintAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<Complaint> localVarResponse = await GetComplaintWithHttpInfoAsync(id, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get complaint Get complaint
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="id">ID of the complaint</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (Complaint)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Complaint>> GetComplaintWithHttpInfoAsync(Guid id, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("id", mailslurp.Client.ClientUtils.ParameterToString(id)); // path parameter

            localVarRequestOptions.Operation = "BounceControllerApi.GetComplaint";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<Complaint>("/bounce/complaints/{id}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetComplaint", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of complaints. SMTP complaints made against your account
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageComplaint</returns>
        public PageComplaint GetComplaints(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageComplaint> localVarResponse = GetComplaintsWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of complaints. SMTP complaints made against your account
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageComplaint</returns>
        public mailslurp.Client.ApiResponse<PageComplaint> GetComplaintsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetComplaints";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageComplaint>("/bounce/complaints", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetComplaints", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of complaints. SMTP complaints made against your account
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageComplaint</returns>
        public async System.Threading.Tasks.Task<PageComplaint> GetComplaintsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageComplaint> localVarResponse = await GetComplaintsWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of complaints. SMTP complaints made against your account
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index  (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageComplaint)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageComplaint>> GetComplaintsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetComplaints";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageComplaint>("/bounce/complaints", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetComplaints", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of unsubscribed recipients. Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageListUnsubscribeRecipients</returns>
        public PageListUnsubscribeRecipients GetListUnsubscribeRecipients(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageListUnsubscribeRecipients> localVarResponse = GetListUnsubscribeRecipientsWithHttpInfo(page, size, sort, domainId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of unsubscribed recipients. Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageListUnsubscribeRecipients</returns>
        public mailslurp.Client.ApiResponse<PageListUnsubscribeRecipients> GetListUnsubscribeRecipientsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetListUnsubscribeRecipients";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageListUnsubscribeRecipients>("/bounce/list-unsubscribe-recipients", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetListUnsubscribeRecipients", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get paginated list of unsubscribed recipients. Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageListUnsubscribeRecipients</returns>
        public async System.Threading.Tasks.Task<PageListUnsubscribeRecipients> GetListUnsubscribeRecipientsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageListUnsubscribeRecipients> localVarResponse = await GetListUnsubscribeRecipientsWithHttpInfoAsync(page, size, sort, domainId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get paginated list of unsubscribed recipients. Unsubscribed recipient have unsubscribed from a mailing list for a user or domain and cannot be contacted again.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index (optional, default to 0)</param>
        /// <param name="size">Optional page size  (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="domainId">Filter by domainId (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageListUnsubscribeRecipients)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageListUnsubscribeRecipients>> GetListUnsubscribeRecipientsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), Guid? domainId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (domainId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "domainId", domainId));
            }

            localVarRequestOptions.Operation = "BounceControllerApi.GetListUnsubscribeRecipients";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageListUnsubscribeRecipients>("/bounce/list-unsubscribe-recipients", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetListUnsubscribeRecipients", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/AttachmentControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAttachmentControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Delete all attachments
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAllAttachments(int operationIndex = 0);

        /// <summary>
        /// Delete all attachments
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAllAttachmentsWithHttpInfo(int operationIndex = 0);
        /// <summary>
        /// Delete an attachment
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAttachment(string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Delete an attachment
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAttachmentWithHttpInfo(string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DownloadAttachmentDto</returns>
        DownloadAttachmentDto DownloadAttachmentAsBase64Encoded(string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DownloadAttachmentDto</returns>
        ApiResponse<DownloadAttachmentDto> DownloadAttachmentAsBase64EncodedWithHttpInfo(string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        byte[] DownloadAttachmentAsBytes(string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        ApiResponse<byte[]> DownloadAttachmentAsBytesWithHttpInfo(string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get an attachment entity
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentEntity</returns>
        AttachmentEntity GetAttachment(string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Get an attachment entity
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentEntity</returns>
        ApiResponse<AttachmentEntity> GetAttachmentWithHttpInfo(string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get email attachment metadata information
        /// </summary>
        /// <remarks>
        /// Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentMetaData</returns>
        AttachmentMetaData GetAttachmentInfo(string attachmentId, int operationIndex = 0);

        /// <summary>
        /// Get email attachment metadata information
        /// </summary>
        /// <remarks>
        /// Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentMetaData</returns>
        ApiResponse<AttachmentMetaData> GetAttachmentInfoWithHttpInfo(string attachmentId, int operationIndex = 0);
        /// <summary>
        /// Get email attachments
        /// </summary>
        /// <remarks>
        /// Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageAttachmentEntity</returns>
        PageAttachmentEntity GetAttachments(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);

        /// <summary>
        /// Get email attachments
        /// </summary>
        /// <remarks>
        /// Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageAttachmentEntity</returns>
        ApiResponse<PageAttachmentEntity> GetAttachmentsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0);
        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        List<string> UploadAttachment(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0);

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        ApiResponse<List<string>> UploadAttachmentWithHttpInfo(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0);
        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        List<string> UploadAttachmentBytes(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0);

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        ApiResponse<List<string>> UploadAttachmentBytesWithHttpInfo(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0);
        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        List<string> UploadMultipartForm(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0);

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        ApiResponse<List<string>> UploadMultipartFormWithHttpInfo(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAttachmentControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Delete all attachments
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAllAttachmentsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete all attachments
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAllAttachmentsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an attachment
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAttachmentAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an attachment
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAttachmentWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DownloadAttachmentDto</returns>
        System.Threading.Tasks.Task<DownloadAttachmentDto> DownloadAttachmentAsBase64EncodedAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DownloadAttachmentDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<DownloadAttachmentDto>> DownloadAttachmentAsBase64EncodedWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        System.Threading.Tasks.Task<byte[]> DownloadAttachmentAsBytesAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints.
        /// </summary>
        /// <remarks>
        /// Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        System.Threading.Tasks.Task<ApiResponse<byte[]>> DownloadAttachmentAsBytesWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an attachment entity
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentEntity</returns>
        System.Threading.Tasks.Task<AttachmentEntity> GetAttachmentAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an attachment entity
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentEntity)</returns>
        System.Threading.Tasks.Task<ApiResponse<AttachmentEntity>> GetAttachmentWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachment metadata information
        /// </summary>
        /// <remarks>
        /// Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentMetaData</returns>
        System.Threading.Tasks.Task<AttachmentMetaData> GetAttachmentInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachment metadata information
        /// </summary>
        /// <remarks>
        /// Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentMetaData)</returns>
        System.Threading.Tasks.Task<ApiResponse<AttachmentMetaData>> GetAttachmentInfoWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get email attachments
        /// </summary>
        /// <remarks>
        /// Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageAttachmentEntity</returns>
        System.Threading.Tasks.Task<PageAttachmentEntity> GetAttachmentsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get email attachments
        /// </summary>
        /// <remarks>
        /// Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageAttachmentEntity)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageAttachmentEntity>> GetAttachmentsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        System.Threading.Tasks.Task<List<string>> UploadAttachmentAsync(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<string>>> UploadAttachmentWithHttpInfoAsync(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        System.Threading.Tasks.Task<List<string>> UploadAttachmentBytesAsync(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<string>>> UploadAttachmentBytesWithHttpInfoAsync(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        System.Threading.Tasks.Task<List<string>> UploadMultipartFormAsync(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment.
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        System.Threading.Tasks.Task<ApiResponse<List<string>>> UploadMultipartFormWithHttpInfoAsync(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAttachmentControllerApi : IAttachmentControllerApiSync, IAttachmentControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public AttachmentControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public AttachmentControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public AttachmentControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AttachmentControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public AttachmentControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Delete all attachments 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAllAttachments(int operationIndex = 0)
        {
            DeleteAllAttachmentsWithHttpInfo();
        }

        /// <summary>
        /// Delete all attachments 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAllAttachmentsWithHttpInfo(int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "AttachmentControllerApi.DeleteAllAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/attachments", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete all attachments 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAllAttachmentsAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAllAttachmentsWithHttpInfoAsync(operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete all attachments 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAllAttachmentsWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }


            localVarRequestOptions.Operation = "AttachmentControllerApi.DeleteAllAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/attachments", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAllAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an attachment 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAttachment(string attachmentId, int operationIndex = 0)
        {
            DeleteAttachmentWithHttpInfo(attachmentId);
        }

        /// <summary>
        /// Delete an attachment 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAttachmentWithHttpInfo(string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DeleteAttachment");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DeleteAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/attachments/{attachmentId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an attachment 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAttachmentAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAttachmentWithHttpInfoAsync(attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an attachment 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAttachmentWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DeleteAttachment");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DeleteAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/attachments/{attachmentId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>DownloadAttachmentDto</returns>
        public DownloadAttachmentDto DownloadAttachmentAsBase64Encoded(string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<DownloadAttachmentDto> localVarResponse = DownloadAttachmentAsBase64EncodedWithHttpInfo(attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of DownloadAttachmentDto</returns>
        public mailslurp.Client.ApiResponse<DownloadAttachmentDto> DownloadAttachmentAsBase64EncodedWithHttpInfo(string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DownloadAttachmentAsBase64Encoded");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DownloadAttachmentAsBase64Encoded";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<DownloadAttachmentDto>("/attachments/{attachmentId}/base64", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentAsBase64Encoded", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of DownloadAttachmentDto</returns>
        public async System.Threading.Tasks.Task<DownloadAttachmentDto> DownloadAttachmentAsBase64EncodedAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<DownloadAttachmentDto> localVarResponse = await DownloadAttachmentAsBase64EncodedWithHttpInfoAsync(attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment as base64 encoded string as alternative to binary responses. To read the content decode the Base64 encoded contents. Returns the specified attachment for a given email as a base 64 encoded string. The response type is application/json. This method is similar to the &#x60;downloadAttachment&#x60; method but allows some clients to get around issues with binary responses.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (DownloadAttachmentDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<DownloadAttachmentDto>> DownloadAttachmentAsBase64EncodedWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DownloadAttachmentAsBase64Encoded");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DownloadAttachmentAsBase64Encoded";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<DownloadAttachmentDto>("/attachments/{attachmentId}/base64", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentAsBase64Encoded", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>byte[]</returns>
        public byte[] DownloadAttachmentAsBytes(string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = DownloadAttachmentAsBytesWithHttpInfo(attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of byte[]</returns>
        public mailslurp.Client.ApiResponse<byte[]> DownloadAttachmentAsBytesWithHttpInfo(string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DownloadAttachmentAsBytes");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DownloadAttachmentAsBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<byte[]>("/attachments/{attachmentId}/bytes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentAsBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of byte[]</returns>
        public async System.Threading.Tasks.Task<byte[]> DownloadAttachmentAsBytesAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<byte[]> localVarResponse = await DownloadAttachmentAsBytesWithHttpInfoAsync(attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Download attachments. Get email attachment bytes. If you have trouble with byte responses try the &#x60;downloadAttachmentBase64&#x60; response endpoints. Returns the specified attachment for a given email as a stream / array of bytes. You can find attachment ids in email responses endpoint responses. The response type is application/octet-stream.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (byte[])</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<byte[]>> DownloadAttachmentAsBytesWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->DownloadAttachmentAsBytes");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/octet-stream"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.DownloadAttachmentAsBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<byte[]>("/attachments/{attachmentId}/bytes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DownloadAttachmentAsBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an attachment entity 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentEntity</returns>
        public AttachmentEntity GetAttachment(string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AttachmentEntity> localVarResponse = GetAttachmentWithHttpInfo(attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an attachment entity 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentEntity</returns>
        public mailslurp.Client.ApiResponse<AttachmentEntity> GetAttachmentWithHttpInfo(string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->GetAttachment");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AttachmentEntity>("/attachments/{attachmentId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an attachment entity 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentEntity</returns>
        public async System.Threading.Tasks.Task<AttachmentEntity> GetAttachmentAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AttachmentEntity> localVarResponse = await GetAttachmentWithHttpInfoAsync(attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an attachment entity 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentEntity)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AttachmentEntity>> GetAttachmentWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->GetAttachment");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AttachmentEntity>("/attachments/{attachmentId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment metadata information Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AttachmentMetaData</returns>
        public AttachmentMetaData GetAttachmentInfo(string attachmentId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AttachmentMetaData> localVarResponse = GetAttachmentInfoWithHttpInfo(attachmentId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment metadata information Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AttachmentMetaData</returns>
        public mailslurp.Client.ApiResponse<AttachmentMetaData> GetAttachmentInfoWithHttpInfo(string attachmentId, int operationIndex = 0)
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->GetAttachmentInfo");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachmentInfo";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AttachmentMetaData>("/attachments/{attachmentId}/metadata", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachmentInfo", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachment metadata information Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AttachmentMetaData</returns>
        public async System.Threading.Tasks.Task<AttachmentMetaData> GetAttachmentInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AttachmentMetaData> localVarResponse = await GetAttachmentInfoWithHttpInfoAsync(attachmentId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachment metadata information Returns the metadata for an attachment. It is saved separately to the content of the attachment. Contains properties &#x60;name&#x60; and &#x60;content-type&#x60; and &#x60;content-length&#x60; in bytes for a given attachment.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="attachmentId">ID of attachment</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AttachmentMetaData)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AttachmentMetaData>> GetAttachmentInfoWithHttpInfoAsync(string attachmentId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'attachmentId' is set
            if (attachmentId == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'attachmentId' when calling AttachmentControllerApi->GetAttachmentInfo");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("attachmentId", mailslurp.Client.ClientUtils.ParameterToString(attachmentId)); // path parameter

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachmentInfo";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AttachmentMetaData>("/attachments/{attachmentId}/metadata", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachmentInfo", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachments Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageAttachmentEntity</returns>
        public PageAttachmentEntity GetAttachments(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageAttachmentEntity> localVarResponse = GetAttachmentsWithHttpInfo(page, size, sort, fileNameFilter, since, before, inboxId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachments Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageAttachmentEntity</returns>
        public mailslurp.Client.ApiResponse<PageAttachmentEntity> GetAttachmentsWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (fileNameFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "fileNameFilter", fileNameFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageAttachmentEntity>("/attachments", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get email attachments Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageAttachmentEntity</returns>
        public async System.Threading.Tasks.Task<PageAttachmentEntity> GetAttachmentsAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageAttachmentEntity> localVarResponse = await GetAttachmentsWithHttpInfoAsync(page, size, sort, fileNameFilter, since, before, inboxId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get email attachments Get all attachments in paginated response. Each entity contains meta data for the attachment such as &#x60;name&#x60; and &#x60;content-type&#x60;. Use the &#x60;attachmentId&#x60; and the download endpoints to get the file contents.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index for list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size for list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="fileNameFilter">Optional file name and content type search filter (optional)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="inboxId">Optional inboxId to filter attachments by (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageAttachmentEntity)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageAttachmentEntity>> GetAttachmentsWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), string fileNameFilter = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), Guid? inboxId = default(Guid?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (fileNameFilter != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "fileNameFilter", fileNameFilter));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }
            if (inboxId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "inboxId", inboxId));
            }

            localVarRequestOptions.Operation = "AttachmentControllerApi.GetAttachments";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageAttachmentEntity>("/attachments", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAttachments", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        public List<string> UploadAttachment(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = UploadAttachmentWithHttpInfo(uploadAttachmentOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        public mailslurp.Client.ApiResponse<List<string>> UploadAttachmentWithHttpInfo(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0)
        {
            // verify the required parameter 'uploadAttachmentOptions' is set
            if (uploadAttachmentOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'uploadAttachmentOptions' when calling AttachmentControllerApi->UploadAttachment");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = uploadAttachmentOptions;

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<string>>("/attachments", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        public async System.Threading.Tasks.Task<List<string>> UploadAttachmentAsync(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = await UploadAttachmentWithHttpInfoAsync(uploadAttachmentOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using base64 file encoding. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="uploadAttachmentOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<string>>> UploadAttachmentWithHttpInfoAsync(UploadAttachmentOptions uploadAttachmentOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'uploadAttachmentOptions' is set
            if (uploadAttachmentOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'uploadAttachmentOptions' when calling AttachmentControllerApi->UploadAttachment");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = uploadAttachmentOptions;

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadAttachment";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<string>>("/attachments", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadAttachment", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        public List<string> UploadAttachmentBytes(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = UploadAttachmentBytesWithHttpInfo(contentType, contentType2, contentId, filename, filename2);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        public mailslurp.Client.ApiResponse<List<string>> UploadAttachmentBytesWithHttpInfo(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/json"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (contentType2 != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType2));
            }
            if (contentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentId", contentId));
            }
            if (filename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filename", filename));
            }
            if (contentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("contentType", mailslurp.Client.ClientUtils.ParameterToString(contentType)); // header parameter
            }
            if (filename2 != null)
            {
                localVarRequestOptions.HeaderParameters.Add("filename", mailslurp.Client.ClientUtils.ParameterToString(filename2)); // header parameter
            }

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadAttachmentBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<string>>("/attachments/bytes", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadAttachmentBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        public async System.Threading.Tasks.Task<List<string>> UploadAttachmentBytesAsync(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = await UploadAttachmentBytesWithHttpInfoAsync(contentType, contentType2, contentId, filename, filename2, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using file byte stream input octet stream. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentType"> (optional)</param>
        /// <param name="contentType2">Optional contentType for file. For instance &#x60;application/pdf&#x60; (optional)</param>
        /// <param name="contentId">Optional content ID (CID) to save upload with (optional)</param>
        /// <param name="filename">Optional filename to save upload with (optional)</param>
        /// <param name="filename2"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<string>>> UploadAttachmentBytesWithHttpInfoAsync(string contentType = default(string), string contentType2 = default(string), string contentId = default(string), string filename = default(string), string filename2 = default(string), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "application/json"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (contentType2 != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType2));
            }
            if (contentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentId", contentId));
            }
            if (filename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filename", filename));
            }
            if (contentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("contentType", mailslurp.Client.ClientUtils.ParameterToString(contentType)); // header parameter
            }
            if (filename2 != null)
            {
                localVarRequestOptions.HeaderParameters.Add("filename", mailslurp.Client.ClientUtils.ParameterToString(filename2)); // header parameter
            }

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadAttachmentBytes";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<string>>("/attachments/bytes", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadAttachmentBytes", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>List&lt;string&gt;</returns>
        public List<string> UploadMultipartForm(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = UploadMultipartFormWithHttpInfo(contentId, contentType, filename, xFilename, uploadMultipartFormRequest);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of List&lt;string&gt;</returns>
        public mailslurp.Client.ApiResponse<List<string>> UploadMultipartFormWithHttpInfo(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (contentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentId", contentId));
            }
            if (contentType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType));
            }
            if (filename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filename", filename));
            }
            if (xFilename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "x-filename", xFilename));
            }
            localVarRequestOptions.Data = uploadMultipartFormRequest;

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadMultipartForm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<List<string>>("/attachments/multipart", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadMultipartForm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of List&lt;string&gt;</returns>
        public async System.Threading.Tasks.Task<List<string>> UploadMultipartFormAsync(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<List<string>> localVarResponse = await UploadMultipartFormWithHttpInfoAsync(contentId, contentType, filename, xFilename, uploadMultipartFormRequest, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Upload an attachment for sending using a Multipart Form request. Returns an array whose first element is the ID of the uploaded attachment. 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="contentId">Optional content ID of attachment (optional)</param>
        /// <param name="contentType">Optional content type of attachment (optional)</param>
        /// <param name="filename">Optional name of file (optional)</param>
        /// <param name="xFilename">Optional content type header of attachment (optional)</param>
        /// <param name="uploadMultipartFormRequest"> (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (List&lt;string&gt;)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<List<string>>> UploadMultipartFormWithHttpInfoAsync(string contentId = default(string), string contentType = default(string), string filename = default(string), string xFilename = default(string), UploadMultipartFormRequest uploadMultipartFormRequest = default(UploadMultipartFormRequest), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (contentId != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentId", contentId));
            }
            if (contentType != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "contentType", contentType));
            }
            if (filename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "filename", filename));
            }
            if (xFilename != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "x-filename", xFilename));
            }
            localVarRequestOptions.Data = uploadMultipartFormRequest;

            localVarRequestOptions.Operation = "AttachmentControllerApi.UploadMultipartForm";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<List<string>>("/attachments/multipart", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UploadMultipartForm", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}

src/mailslurp/Api/AliasControllerApi.cs

/*
 * MailSlurp API
 *
 * MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
 *
 * The version of the OpenAPI document: 6.5.2
 * Contact: contact@mailslurp.dev
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.Mime;
using mailslurp.Client;
using mailslurp.Model;

namespace mailslurp.Api
{

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAliasControllerApiSync : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active.
        /// </summary>
        /// <remarks>
        /// Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        AliasDto CreateAlias(CreateAliasOptions createAliasOptions, int operationIndex = 0);

        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active.
        /// </summary>
        /// <remarks>
        /// Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        ApiResponse<AliasDto> CreateAliasWithHttpInfo(CreateAliasOptions createAliasOptions, int operationIndex = 0);
        /// <summary>
        /// Delete an email alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        void DeleteAlias(Guid aliasId, int operationIndex = 0);

        /// <summary>
        /// Delete an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        ApiResponse<Object> DeleteAliasWithHttpInfo(Guid aliasId, int operationIndex = 0);
        /// <summary>
        /// Get an email alias
        /// </summary>
        /// <remarks>
        /// Get an email alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        AliasDto GetAlias(Guid aliasId, int operationIndex = 0);

        /// <summary>
        /// Get an email alias
        /// </summary>
        /// <remarks>
        /// Get an email alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        ApiResponse<AliasDto> GetAliasWithHttpInfo(Guid aliasId, int operationIndex = 0);
        /// <summary>
        /// Get emails for an alias
        /// </summary>
        /// <remarks>
        /// Get paginated emails for an alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        PageEmailProjection GetAliasEmails(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get emails for an alias
        /// </summary>
        /// <remarks>
        /// Get paginated emails for an alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        ApiResponse<PageEmailProjection> GetAliasEmailsWithHttpInfo(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get threads created for an alias
        /// </summary>
        /// <remarks>
        /// Returns threads created for an email alias in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageThreadProjection</returns>
        PageThreadProjection GetAliasThreads(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get threads created for an alias
        /// </summary>
        /// <remarks>
        /// Returns threads created for an email alias in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageThreadProjection</returns>
        ApiResponse<PageThreadProjection> GetAliasThreadsWithHttpInfo(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get all email aliases you have created
        /// </summary>
        /// <remarks>
        /// Get all email aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageAlias</returns>
        PageAlias GetAliases(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all email aliases you have created
        /// </summary>
        /// <remarks>
        /// Get all email aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageAlias</returns>
        ApiResponse<PageAlias> GetAliasesWithHttpInfo(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Get a thread
        /// </summary>
        /// <remarks>
        /// Return a thread associated with an alias
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ThreadProjection</returns>
        ThreadProjection GetThread(Guid threadId, int operationIndex = 0);

        /// <summary>
        /// Get a thread
        /// </summary>
        /// <remarks>
        /// Return a thread associated with an alias
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ThreadProjection</returns>
        ApiResponse<ThreadProjection> GetThreadWithHttpInfo(Guid threadId, int operationIndex = 0);
        /// <summary>
        /// Get all threads
        /// </summary>
        /// <remarks>
        /// Returns threads created for all aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageThreadProjection</returns>
        PageThreadProjection GetThreadsPaginated(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);

        /// <summary>
        /// Get all threads
        /// </summary>
        /// <remarks>
        /// Returns threads created for all aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageThreadProjection</returns>
        ApiResponse<PageThreadProjection> GetThreadsPaginatedWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0);
        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto ReplyToAliasEmail(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> ReplyToAliasEmailWithHttpInfo(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Send an email from an alias inbox
        /// </summary>
        /// <remarks>
        /// Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        SentEmailDto SendAliasEmail(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0);

        /// <summary>
        /// Send an email from an alias inbox
        /// </summary>
        /// <remarks>
        /// Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        ApiResponse<SentEmailDto> SendAliasEmailWithHttpInfo(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0);
        /// <summary>
        /// Update an email alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        AliasDto UpdateAlias(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0);

        /// <summary>
        /// Update an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        ApiResponse<AliasDto> UpdateAliasWithHttpInfo(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0);
        #endregion Synchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAliasControllerApiAsync : IApiAccessor
    {
        #region Asynchronous Operations
        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active.
        /// </summary>
        /// <remarks>
        /// Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        System.Threading.Tasks.Task<AliasDto> CreateAliasAsync(CreateAliasOptions createAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active.
        /// </summary>
        /// <remarks>
        /// Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<AliasDto>> CreateAliasWithHttpInfoAsync(CreateAliasOptions createAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Delete an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        System.Threading.Tasks.Task DeleteAliasAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Delete an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        System.Threading.Tasks.Task<ApiResponse<Object>> DeleteAliasWithHttpInfoAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get an email alias
        /// </summary>
        /// <remarks>
        /// Get an email alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        System.Threading.Tasks.Task<AliasDto> GetAliasAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get an email alias
        /// </summary>
        /// <remarks>
        /// Get an email alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<AliasDto>> GetAliasWithHttpInfoAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get emails for an alias
        /// </summary>
        /// <remarks>
        /// Get paginated emails for an alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        System.Threading.Tasks.Task<PageEmailProjection> GetAliasEmailsAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get emails for an alias
        /// </summary>
        /// <remarks>
        /// Get paginated emails for an alias by ID
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageEmailProjection>> GetAliasEmailsWithHttpInfoAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get threads created for an alias
        /// </summary>
        /// <remarks>
        /// Returns threads created for an email alias in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageThreadProjection</returns>
        System.Threading.Tasks.Task<PageThreadProjection> GetAliasThreadsAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get threads created for an alias
        /// </summary>
        /// <remarks>
        /// Returns threads created for an email alias in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageThreadProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageThreadProjection>> GetAliasThreadsWithHttpInfoAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all email aliases you have created
        /// </summary>
        /// <remarks>
        /// Get all email aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageAlias</returns>
        System.Threading.Tasks.Task<PageAlias> GetAliasesAsync(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all email aliases you have created
        /// </summary>
        /// <remarks>
        /// Get all email aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageAlias)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageAlias>> GetAliasesWithHttpInfoAsync(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get a thread
        /// </summary>
        /// <remarks>
        /// Return a thread associated with an alias
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ThreadProjection</returns>
        System.Threading.Tasks.Task<ThreadProjection> GetThreadAsync(Guid threadId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get a thread
        /// </summary>
        /// <remarks>
        /// Return a thread associated with an alias
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ThreadProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<ThreadProjection>> GetThreadWithHttpInfoAsync(Guid threadId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Get all threads
        /// </summary>
        /// <remarks>
        /// Returns threads created for all aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageThreadProjection</returns>
        System.Threading.Tasks.Task<PageThreadProjection> GetThreadsPaginatedAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Get all threads
        /// </summary>
        /// <remarks>
        /// Returns threads created for all aliases in paginated form
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageThreadProjection)</returns>
        System.Threading.Tasks.Task<ApiResponse<PageThreadProjection>> GetThreadsPaginatedWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> ReplyToAliasEmailAsync(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Reply to an email
        /// </summary>
        /// <remarks>
        /// Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> ReplyToAliasEmailWithHttpInfoAsync(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Send an email from an alias inbox
        /// </summary>
        /// <remarks>
        /// Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        System.Threading.Tasks.Task<SentEmailDto> SendAliasEmailAsync(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Send an email from an alias inbox
        /// </summary>
        /// <remarks>
        /// Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<SentEmailDto>> SendAliasEmailWithHttpInfoAsync(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        /// <summary>
        /// Update an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        System.Threading.Tasks.Task<AliasDto> UpdateAliasAsync(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));

        /// <summary>
        /// Update an email alias
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        System.Threading.Tasks.Task<ApiResponse<AliasDto>> UpdateAliasWithHttpInfoAsync(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface IAliasControllerApi : IAliasControllerApiSync, IAliasControllerApiAsync
    {

    }

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

        /// <summary>
        /// Initializes a new instance of the <see cref="AliasControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public AliasControllerApi() : this((string)null)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AliasControllerApi"/> class.
        /// </summary>
        /// <returns></returns>
        public AliasControllerApi(string basePath)
        {
            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                new mailslurp.Client.Configuration { BasePath = basePath }
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AliasControllerApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public AliasControllerApi(mailslurp.Client.Configuration configuration)
        {
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Configuration = mailslurp.Client.Configuration.MergeConfigurations(
                mailslurp.Client.GlobalConfiguration.Instance,
                configuration
            );
            this.Client = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            this.AsynchronousClient = new mailslurp.Client.ApiClient(this.Configuration.BasePath);
            ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AliasControllerApi"/> class
        /// using a Configuration object and client instance.
        /// </summary>
        /// <param name="client">The client interface for synchronous API access.</param>
        /// <param name="asyncClient">The client interface for asynchronous API access.</param>
        /// <param name="configuration">The configuration object.</param>
        public AliasControllerApi(mailslurp.Client.ISynchronousClient client, mailslurp.Client.IAsynchronousClient asyncClient, mailslurp.Client.IReadableConfiguration configuration)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (asyncClient == null) throw new ArgumentNullException("asyncClient");
            if (configuration == null) throw new ArgumentNullException("configuration");

            this.Client = client;
            this.AsynchronousClient = asyncClient;
            this.Configuration = configuration;
            this.ExceptionFactory = mailslurp.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// The client for accessing this underlying API asynchronously.
        /// </summary>
        public mailslurp.Client.IAsynchronousClient AsynchronousClient { get; set; }

        /// <summary>
        /// The client for accessing this underlying API synchronously.
        /// </summary>
        public mailslurp.Client.ISynchronousClient Client { get; set; }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public string GetBasePath()
        {
            return this.Configuration.BasePath;
        }

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

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public mailslurp.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>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active. Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        public AliasDto CreateAlias(CreateAliasOptions createAliasOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = CreateAliasWithHttpInfo(createAliasOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active. Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        public mailslurp.Client.ApiResponse<AliasDto> CreateAliasWithHttpInfo(CreateAliasOptions createAliasOptions, int operationIndex = 0)
        {
            // verify the required parameter 'createAliasOptions' is set
            if (createAliasOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createAliasOptions' when calling AliasControllerApi->CreateAlias");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createAliasOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.CreateAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<AliasDto>("/aliases", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active. Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        public async System.Threading.Tasks.Task<AliasDto> CreateAliasAsync(CreateAliasOptions createAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = await CreateAliasWithHttpInfoAsync(createAliasOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Create an email alias. Must be verified by clicking link inside verification email that will be sent to the address. Once verified the alias will be active. Email aliases use a MailSlurp randomly generated email address (or a custom domain inbox that you provide) to mask or proxy a real email address. Emails sent to the alias address will be forwarded to the hidden email address it was created for. If you want to send a reply use the threadId attached
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="createAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AliasDto>> CreateAliasWithHttpInfoAsync(CreateAliasOptions createAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'createAliasOptions' is set
            if (createAliasOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'createAliasOptions' when calling AliasControllerApi->CreateAlias");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.Data = createAliasOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.CreateAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<AliasDto>("/aliases", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("CreateAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns></returns>
        public void DeleteAlias(Guid aliasId, int operationIndex = 0)
        {
            DeleteAliasWithHttpInfo(aliasId);
        }

        /// <summary>
        /// Delete an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of Object(void)</returns>
        public mailslurp.Client.ApiResponse<Object> DeleteAliasWithHttpInfo(Guid aliasId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.DeleteAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Delete<Object>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Delete an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of void</returns>
        public async System.Threading.Tasks.Task DeleteAliasAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            await DeleteAliasWithHttpInfoAsync(aliasId, operationIndex, cancellationToken).ConfigureAwait(false);
        }

        /// <summary>
        /// Delete an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<Object>> DeleteAliasWithHttpInfoAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.DeleteAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.DeleteAsync<Object>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("DeleteAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an email alias Get an email alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        public AliasDto GetAlias(Guid aliasId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = GetAliasWithHttpInfo(aliasId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an email alias Get an email alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        public mailslurp.Client.ApiResponse<AliasDto> GetAliasWithHttpInfo(Guid aliasId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.GetAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<AliasDto>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get an email alias Get an email alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        public async System.Threading.Tasks.Task<AliasDto> GetAliasAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = await GetAliasWithHttpInfoAsync(aliasId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get an email alias Get an email alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AliasDto>> GetAliasWithHttpInfoAsync(Guid aliasId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.GetAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<AliasDto>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get emails for an alias Get paginated emails for an alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageEmailProjection</returns>
        public PageEmailProjection GetAliasEmails(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = GetAliasEmailsWithHttpInfo(aliasId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get emails for an alias Get paginated emails for an alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageEmailProjection</returns>
        public mailslurp.Client.ApiResponse<PageEmailProjection> GetAliasEmailsWithHttpInfo(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliasEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageEmailProjection>("/aliases/{aliasId}/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliasEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get emails for an alias Get paginated emails for an alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageEmailProjection</returns>
        public async System.Threading.Tasks.Task<PageEmailProjection> GetAliasEmailsAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageEmailProjection> localVarResponse = await GetAliasEmailsWithHttpInfoAsync(aliasId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get emails for an alias Get paginated emails for an alias by ID
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index alias email list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size alias email list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageEmailProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageEmailProjection>> GetAliasEmailsWithHttpInfoAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliasEmails";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageEmailProjection>("/aliases/{aliasId}/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliasEmails", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get threads created for an alias Returns threads created for an email alias in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageThreadProjection</returns>
        public PageThreadProjection GetAliasThreads(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageThreadProjection> localVarResponse = GetAliasThreadsWithHttpInfo(aliasId, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get threads created for an alias Returns threads created for an email alias in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageThreadProjection</returns>
        public mailslurp.Client.ApiResponse<PageThreadProjection> GetAliasThreadsWithHttpInfo(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliasThreads";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageThreadProjection>("/aliases/{aliasId}/threads", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliasThreads", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get threads created for an alias Returns threads created for an email alias in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageThreadProjection</returns>
        public async System.Threading.Tasks.Task<PageThreadProjection> GetAliasThreadsAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageThreadProjection> localVarResponse = await GetAliasThreadsWithHttpInfoAsync(aliasId, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get threads created for an alias Returns threads created for an email alias in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageThreadProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageThreadProjection>> GetAliasThreadsWithHttpInfoAsync(Guid aliasId, int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliasThreads";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageThreadProjection>("/aliases/{aliasId}/threads", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliasThreads", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all email aliases you have created Get all email aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageAlias</returns>
        public PageAlias GetAliases(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageAlias> localVarResponse = GetAliasesWithHttpInfo(search, page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all email aliases you have created Get all email aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageAlias</returns>
        public mailslurp.Client.ApiResponse<PageAlias> GetAliasesWithHttpInfo(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliases";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageAlias>("/aliases", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliases", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all email aliases you have created Get all email aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageAlias</returns>
        public async System.Threading.Tasks.Task<PageAlias> GetAliasesAsync(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageAlias> localVarResponse = await GetAliasesWithHttpInfoAsync(search, page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all email aliases you have created Get all email aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="search">Optional search term (optional)</param>
        /// <param name="page">Optional page index in alias list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in alias list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Filter by created at after the given timestamp (optional)</param>
        /// <param name="before">Filter by created at before the given timestamp (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageAlias)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageAlias>> GetAliasesWithHttpInfoAsync(string search = default(string), int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (search != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "search", search));
            }
            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetAliases";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageAlias>("/aliases", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetAliases", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a thread Return a thread associated with an alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ThreadProjection</returns>
        public ThreadProjection GetThread(Guid threadId, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<ThreadProjection> localVarResponse = GetThreadWithHttpInfo(threadId);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a thread Return a thread associated with an alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of ThreadProjection</returns>
        public mailslurp.Client.ApiResponse<ThreadProjection> GetThreadWithHttpInfo(Guid threadId, int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("threadId", mailslurp.Client.ClientUtils.ParameterToString(threadId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.GetThread";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<ThreadProjection>("/aliases/threads/{threadId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetThread", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get a thread Return a thread associated with an alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ThreadProjection</returns>
        public async System.Threading.Tasks.Task<ThreadProjection> GetThreadAsync(Guid threadId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<ThreadProjection> localVarResponse = await GetThreadWithHttpInfoAsync(threadId, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get a thread Return a thread associated with an alias
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="threadId"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (ThreadProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<ThreadProjection>> GetThreadWithHttpInfoAsync(Guid threadId, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("threadId", mailslurp.Client.ClientUtils.ParameterToString(threadId)); // path parameter

            localVarRequestOptions.Operation = "AliasControllerApi.GetThread";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<ThreadProjection>("/aliases/threads/{threadId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetThread", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all threads Returns threads created for all aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>PageThreadProjection</returns>
        public PageThreadProjection GetThreadsPaginated(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<PageThreadProjection> localVarResponse = GetThreadsPaginatedWithHttpInfo(page, size, sort, since, before);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all threads Returns threads created for all aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of PageThreadProjection</returns>
        public mailslurp.Client.ApiResponse<PageThreadProjection> GetThreadsPaginatedWithHttpInfo(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0)
        {
            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetThreadsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Get<PageThreadProjection>("/aliases/threads", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetThreadsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Get all threads Returns threads created for all aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of PageThreadProjection</returns>
        public async System.Threading.Tasks.Task<PageThreadProjection> GetThreadsPaginatedAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<PageThreadProjection> localVarResponse = await GetThreadsPaginatedWithHttpInfoAsync(page, size, sort, since, before, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Get all threads Returns threads created for all aliases in paginated form
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="page">Optional page index in thread list pagination (optional, default to 0)</param>
        /// <param name="size">Optional page size in thread list pagination (optional, default to 20)</param>
        /// <param name="sort">Optional createdAt sort direction ASC or DESC (optional, default to ASC)</param>
        /// <param name="since">Optional filter by sent after given date time (optional)</param>
        /// <param name="before">Optional filter by sent before given date time (optional)</param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (PageThreadProjection)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<PageThreadProjection>> GetThreadsPaginatedWithHttpInfoAsync(int? page = default(int?), int? size = default(int?), string sort = default(string), DateTime? since = default(DateTime?), DateTime? before = default(DateTime?), int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            if (page != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "page", page));
            }
            if (size != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "size", size));
            }
            if (sort != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "sort", sort));
            }
            if (since != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "since", since));
            }
            if (before != null)
            {
                localVarRequestOptions.QueryParameters.Add(mailslurp.Client.ClientUtils.ParameterToMultiMap("", "before", before));
            }

            localVarRequestOptions.Operation = "AliasControllerApi.GetThreadsPaginated";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.GetAsync<PageThreadProjection>("/aliases/threads", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("GetThreadsPaginated", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto ReplyToAliasEmail(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = ReplyToAliasEmailWithHttpInfo(aliasId, emailId, replyToAliasEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> ReplyToAliasEmailWithHttpInfo(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'replyToAliasEmailOptions' is set
            if (replyToAliasEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'replyToAliasEmailOptions' when calling AliasControllerApi->ReplyToAliasEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = replyToAliasEmailOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.ReplyToAliasEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<SentEmailDto>("/aliases/{aliasId}/emails/{emailId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToAliasEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> ReplyToAliasEmailAsync(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await ReplyToAliasEmailWithHttpInfoAsync(aliasId, emailId, replyToAliasEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Reply to an email Send the reply to the email sender or reply-to and include same subject cc bcc etc. Reply to an email and the contents will be sent with the existing subject to the emails &#x60;to&#x60;, &#x60;cc&#x60;, and &#x60;bcc&#x60;.
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId">ID of the alias that email belongs to</param>
        /// <param name="emailId">ID of the email that should be replied to</param>
        /// <param name="replyToAliasEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> ReplyToAliasEmailWithHttpInfoAsync(Guid aliasId, Guid emailId, ReplyToAliasEmailOptions replyToAliasEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'replyToAliasEmailOptions' is set
            if (replyToAliasEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'replyToAliasEmailOptions' when calling AliasControllerApi->ReplyToAliasEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.PathParameters.Add("emailId", mailslurp.Client.ClientUtils.ParameterToString(emailId)); // path parameter
            localVarRequestOptions.Data = replyToAliasEmailOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.ReplyToAliasEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<SentEmailDto>("/aliases/{aliasId}/emails/{emailId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("ReplyToAliasEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email from an alias inbox Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>SentEmailDto</returns>
        public SentEmailDto SendAliasEmail(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = SendAliasEmailWithHttpInfo(aliasId, sendEmailOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send an email from an alias inbox Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of SentEmailDto</returns>
        public mailslurp.Client.ApiResponse<SentEmailDto> SendAliasEmailWithHttpInfo(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0)
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling AliasControllerApi->SendAliasEmail");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.SendAliasEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Post<SentEmailDto>("/aliases/{aliasId}/emails", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendAliasEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Send an email from an alias inbox Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of SentEmailDto</returns>
        public async System.Threading.Tasks.Task<SentEmailDto> SendAliasEmailAsync(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<SentEmailDto> localVarResponse = await SendAliasEmailWithHttpInfoAsync(aliasId, sendEmailOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Send an email from an alias inbox Send an email from an alias. Replies to the email will be forwarded to the alias masked email address
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="sendEmailOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (SentEmailDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<SentEmailDto>> SendAliasEmailWithHttpInfoAsync(Guid aliasId, SendEmailOptions sendEmailOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'sendEmailOptions' is set
            if (sendEmailOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'sendEmailOptions' when calling AliasControllerApi->SendAliasEmail");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.Data = sendEmailOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.SendAliasEmail";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PostAsync<SentEmailDto>("/aliases/{aliasId}/emails", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("SendAliasEmail", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>AliasDto</returns>
        public AliasDto UpdateAlias(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0)
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = UpdateAliasWithHttpInfo(aliasId, updateAliasOptions);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <returns>ApiResponse of AliasDto</returns>
        public mailslurp.Client.ApiResponse<AliasDto> UpdateAliasWithHttpInfo(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0)
        {
            // verify the required parameter 'updateAliasOptions' is set
            if (updateAliasOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateAliasOptions' when calling AliasControllerApi->UpdateAlias");
            }

            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.Data = updateAliasOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.UpdateAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = this.Client.Put<AliasDto>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration);
            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

        /// <summary>
        /// Update an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of AliasDto</returns>
        public async System.Threading.Tasks.Task<AliasDto> UpdateAliasAsync(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            mailslurp.Client.ApiResponse<AliasDto> localVarResponse = await UpdateAliasWithHttpInfoAsync(aliasId, updateAliasOptions, operationIndex, cancellationToken).ConfigureAwait(false);
            return localVarResponse.Data;
        }

        /// <summary>
        /// Update an email alias 
        /// </summary>
        /// <exception cref="mailslurp.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="aliasId"></param>
        /// <param name="updateAliasOptions"></param>
        /// <param name="operationIndex">Index associated with the operation.</param>
        /// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
        /// <returns>Task of ApiResponse (AliasDto)</returns>
        public async System.Threading.Tasks.Task<mailslurp.Client.ApiResponse<AliasDto>> UpdateAliasWithHttpInfoAsync(Guid aliasId, UpdateAliasOptions updateAliasOptions, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            // verify the required parameter 'updateAliasOptions' is set
            if (updateAliasOptions == null)
            {
                throw new mailslurp.Client.ApiException(400, "Missing required parameter 'updateAliasOptions' when calling AliasControllerApi->UpdateAlias");
            }


            mailslurp.Client.RequestOptions localVarRequestOptions = new mailslurp.Client.RequestOptions();

            string[] _contentTypes = new string[] {
                "application/json"
            };

            // to determine the Accept header
            string[] _accepts = new string[] {
                "*/*"
            };

            var localVarContentType = mailslurp.Client.ClientUtils.SelectHeaderContentType(_contentTypes);
            if (localVarContentType != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType);
            }

            var localVarAccept = mailslurp.Client.ClientUtils.SelectHeaderAccept(_accepts);
            if (localVarAccept != null)
            {
                localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept);
            }

            localVarRequestOptions.PathParameters.Add("aliasId", mailslurp.Client.ClientUtils.ParameterToString(aliasId)); // path parameter
            localVarRequestOptions.Data = updateAliasOptions;

            localVarRequestOptions.Operation = "AliasControllerApi.UpdateAlias";
            localVarRequestOptions.OperationIndex = operationIndex;

            // authentication (API_KEY) required
            if (!string.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("x-api-key")))
            {
                localVarRequestOptions.HeaderParameters.Add("x-api-key", this.Configuration.GetApiKeyWithPrefix("x-api-key"));
            }

            // make the HTTP request
            var localVarResponse = await this.AsynchronousClient.PutAsync<AliasDto>("/aliases/{aliasId}", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false);

            if (this.ExceptionFactory != null)
            {
                Exception _exception = this.ExceptionFactory("UpdateAlias", localVarResponse);
                if (_exception != null)
                {
                    throw _exception;
                }
            }

            return localVarResponse;
        }

    }
}